18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Zack Rusin <zack@kde.org>
32bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2006, 2011 Apple Inc. All rights reserved.
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora Ltd. All rights reserved.
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Coypright (C) 2008 Holger Hans Peter Freyther
7e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Coypright (C) 2009, 2010 Girish Ramakrishnan <girish@forwardbias.in>
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "FrameLoaderClientQt.h"
352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSComputedStyleDeclaration.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPropertyNames.h"
382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "DocumentLoader.h"
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FormState.h"
405abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "FrameNetworkingContextQt.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h"
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h"
432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "HTMLAppletElement.h"
442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "HTMLFormElement.h"
452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "HTMLPlugInElement.h"
462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "HTTPParsers.h"
472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "HistoryItem.h"
48ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "HitTestResult.h"
492bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(ICONDATABASE)
502bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "IconDatabaseClientQt.h"
512bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
5268513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "JSDOMWindowBase.h"
5468513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MIMETypeRegistry.h"
56ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "MouseEvent.h"
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "NotImplemented.h"
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginData.h"
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginDatabase.h"
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ProgressTracker.h"
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "QNetworkReplyHandler.h"
632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "QWebPageClient.h"
642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "RenderPart.h"
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceHandle.h"
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "ResourceHandleInternal.h"
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "ResourceRequest.h"
682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "ResourceResponse.h"
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ScriptController.h"
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Settings.h"
712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(V8)
722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "V8DOMWindow.h"
732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
7468513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "ViewportArguments.h"
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebframe.h"
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebframe_p.h"
782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "qwebhistory_p.h"
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebhistoryinterface.h"
802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "qwebpage.h"
812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "qwebpage_p.h"
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebpluginfactory.h"
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QCoreApplication>
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QDebug>
862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <QFileInfo>
87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <QGraphicsScene>
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <QGraphicsWidget>
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QNetworkReply>
902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <QNetworkRequest>
91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QStringList>
92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/OwnPtr.h>
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic QMap<unsigned long, QString> dumpAssignedUrls;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// Compare with the file "WebKit/Tools/DumpRenderTree/mac/FrameLoadDelegate.mm".
972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic QString drtDescriptionSuitableForTestResult(WebCore::Frame* webCoreFrame)
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QWebFrame* frame = QWebFramePrivate::kit(webCoreFrame);
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QString name = frame->frameName();
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isMainFrame = frame == frame->page()->mainFrame();
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (isMainFrame) {
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!name.isEmpty())
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return QString::fromLatin1("main frame \"%1\"").arg(name);
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QLatin1String("main frame");
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!name.isEmpty())
1092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return QString::fromLatin1("frame \"%1\"").arg(name);
1102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return QLatin1String("frame (anonymous)");
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
113e14391e94c850b8bd03680c23b38978db68687a8John Reckstatic QString drtPrintFrameUserGestureStatus(WebCore::Frame* frame)
114e14391e94c850b8bd03680c23b38978db68687a8John Reck{
115e14391e94c850b8bd03680c23b38978db68687a8John Reck    if (frame->loader()->isProcessingUserGesture())
116e14391e94c850b8bd03680c23b38978db68687a8John Reck        return QString::fromLatin1("Frame with user gesture \"%1\"").arg(QLatin1String("true"));
117e14391e94c850b8bd03680c23b38978db68687a8John Reck    return QString::fromLatin1("Frame with user gesture \"%1\"").arg(QLatin1String("false"));
118e14391e94c850b8bd03680c23b38978db68687a8John Reck}
119e14391e94c850b8bd03680c23b38978db68687a8John Reck
1202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic QString drtDescriptionSuitableForTestResult(const WebCore::KURL& kurl)
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (kurl.isEmpty() || !kurl.isLocalFile())
1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return kurl.string();
1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Remove the leading path from file urls.
1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return QString(kurl.string()).remove(WebCore::FrameLoaderClientQt::dumpResourceLoadCallbacksPath).mid(1);
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic QString drtDescriptionSuitableForTestResult(const WebCore::ResourceError& error)
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QString failingURL = error.failingURL();
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QString::fromLatin1("<NSError domain NSURLErrorDomain, code %1, failing URL \"%2\">").arg(error.errorCode()).arg(failingURL);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic QString drtDescriptionSuitableForTestResult(const WebCore::ResourceRequest& request)
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QString url = drtDescriptionSuitableForTestResult(request.url());
137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    QString httpMethod = request.httpMethod();
1386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QString mainDocumentUrl = drtDescriptionSuitableForTestResult(request.firstPartyForCookies());
139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return QString::fromLatin1("<NSURLRequest URL %1, main document URL %2, http method %3>").arg(url).arg(mainDocumentUrl).arg(httpMethod);
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic QString drtDescriptionSuitableForTestResult(const WebCore::ResourceResponse& response)
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QString url = drtDescriptionSuitableForTestResult(response.url());
145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    int httpStatusCode = response.httpStatusCode();
146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return QString::fromLatin1("<NSURLResponse %1, http status code %2>").arg(url).arg(httpStatusCode);
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
149ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic QString drtDescriptionSuitableForTestResult(const RefPtr<WebCore::Node> node, int exception)
150ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
151ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    QString result;
152ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (exception) {
1532bde8e466a4451c7319e3a072d118917957d6554Steve Block        result.append(QLatin1String("ERROR"));
154ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return result;
155ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
156ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (!node) {
1572bde8e466a4451c7319e3a072d118917957d6554Steve Block        result.append(QLatin1String("NULL"));
158ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return result;
159ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
160ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    result.append(node->nodeName());
161ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    RefPtr<WebCore::Node> parent = node->parentNode();
162ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (parent) {
1632bde8e466a4451c7319e3a072d118917957d6554Steve Block        result.append(QLatin1String(" > "));
164ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        result.append(drtDescriptionSuitableForTestResult(parent, 0));
165ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
166ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    return result;
167ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace WebCore {
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool FrameLoaderClientQt::dumpFrameLoaderCallbacks = false;
172e14391e94c850b8bd03680c23b38978db68687a8John Reckbool FrameLoaderClientQt::dumpUserGestureInFrameLoaderCallbacks = false;
1736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool FrameLoaderClientQt::dumpResourceLoadCallbacks = false;
1746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool FrameLoaderClientQt::sendRequestReturnsNullOnRedirect = false;
1756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool FrameLoaderClientQt::sendRequestReturnsNull = false;
176ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool FrameLoaderClientQt::dumpResourceResponseMIMETypes = false;
177967717af5423377c967781471ee106e2bb4e11c8Ben Murdochbool FrameLoaderClientQt::deferMainResourceDataLoad = true;
17868513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool FrameLoaderClientQt::dumpHistoryCallbacks = false;
179ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQStringList FrameLoaderClientQt::sendRequestClearHeaders;
1816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenQString FrameLoaderClientQt::dumpResourceLoadCallbacksPath;
182ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool FrameLoaderClientQt::policyDelegateEnabled = false;
183ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool FrameLoaderClientQt::policyDelegatePermissive = false;
1842fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockQMap<QString, QString> FrameLoaderClientQt::URLsToRedirect = QMap<QString, QString>();
185ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// Taken from the file "WebKit/Tools/DumpRenderTree/chromium/WebViewHost.cpp".
187ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic const char* navigationTypeToString(NavigationType type)
188ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
189ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    switch (type) {
190ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeLinkClicked:
191ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "link clicked";
192ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeFormSubmitted:
193ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "form submitted";
194ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeBackForward:
195ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "back/forward";
196ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeReload:
197ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "reload";
198ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeFormResubmitted:
199ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "form resubmitted";
200ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    case NavigationTypeOther:
201ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return "other";
202ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
203ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    return "illegal value";
204ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
2056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFrameLoaderClientQt::FrameLoaderClientQt()
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_frame(0)
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_webFrame(0)
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_pluginView(0)
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_hasSentResponseToPlugin(false)
21168513a70bcd92384395513322f1b801e7bf9c729Steve Block    , m_hasRepresentation(false)
21268513a70bcd92384395513322f1b801e7bf9c729Steve Block    , m_loadError(ResourceError())
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFrameLoaderClientQt::~FrameLoaderClientQt()
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame)
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame = webFrame;
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_frame = frame;
2255abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame || !m_webFrame->page()) {
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        qWarning("FrameLoaderClientQt::setFrame frame without Page!");
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    connect(this, SIGNAL(loadStarted()),
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_webFrame->page(), SIGNAL(loadStarted()));
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    connect(this, SIGNAL(loadStarted()),
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            m_webFrame, SIGNAL(loadStarted()));
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    connect(this, SIGNAL(loadProgress(int)),
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_webFrame->page(), SIGNAL(loadProgress(int)));
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    connect(this, SIGNAL(loadFinished(bool)),
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_webFrame->page(), SIGNAL(loadFinished(bool)));
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    connect(this, SIGNAL(loadFinished(bool)),
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            m_webFrame, SIGNAL(loadFinished(bool)));
241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    connect(this, SIGNAL(titleChanged(QString)),
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            m_webFrame, SIGNAL(titleChanged(QString)));
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::callPolicyFunction(FramePolicyFunction function, PolicyAction action)
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    (m_frame->loader()->policyChecker()->*function)(action);
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::hasWebView() const
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // notImplemented();
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClientQt::savePlatformDataToCachedFrame(CachedFrame*)
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClientQt::transitionToCommittedFromCachedFrame(CachedFrame*)
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::transitionToCommittedForNewPage()
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_frame);
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_webFrame);
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
270635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QBrush brush = m_webFrame->page()->palette().brush(QPalette::Base);
271635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QColor backgroundColor = brush.style() == Qt::SolidPattern ? brush.color() : QColor();
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPage* page = m_webFrame->page();
274cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    const QSize preferredLayoutSize = page->preferredContentsSize();
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ScrollbarMode hScrollbar = (ScrollbarMode) m_webFrame->scrollBarPolicy(Qt::Horizontal);
277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ScrollbarMode vScrollbar = (ScrollbarMode) m_webFrame->scrollBarPolicy(Qt::Vertical);
278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool hLock = hScrollbar != ScrollbarAuto;
279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool vLock = vScrollbar != ScrollbarAuto;
280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    IntSize currentVisibleContentSize = m_frame->view() ? m_frame->view()->actualVisibleContentRect().size() : IntSize();
2824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame->createView(m_webFrame->page()->viewportSize(),
284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark                        backgroundColor, !backgroundColor.alpha(),
285cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                        preferredLayoutSize.isValid() ? IntSize(preferredLayoutSize) : IntSize(),
286cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                        preferredLayoutSize.isValid(),
287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                        hScrollbar, hLock,
288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                        vScrollbar, vLock);
2896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
2906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    bool isMainFrame = m_frame == m_frame->page()->mainFrame();
2914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (isMainFrame && page->d->client) {
2926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        m_frame->view()->setPaintsEntireContents(page->d->client->viewResizesToContentsEnabled());
2934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        m_frame->view()->setDelegatesScrolling(page->d->client->viewResizesToContentsEnabled());
2944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
2954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
2964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    // The HistoryController will update the scroll position later if needed.
2974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    m_frame->view()->setActualVisibleContentRect(IntRect(IntPoint::zero(), currentVisibleContentSize));
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
300cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid FrameLoaderClientQt::didSaveToPageCache()
301cad810f21b803229eb11403f9209855525a25d57Steve Block{
302cad810f21b803229eb11403f9209855525a25d57Steve Block}
303cad810f21b803229eb11403f9209855525a25d57Steve Block
304cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid FrameLoaderClientQt::didRestoreFromPageCache()
305cad810f21b803229eb11403f9209855525a25d57Steve Block{
306cad810f21b803229eb11403f9209855525a25d57Steve Block}
307cad810f21b803229eb11403f9209855525a25d57Steve Block
308e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid FrameLoaderClientQt::dispatchDidBecomeFrameset(bool)
309e14391e94c850b8bd03680c23b38978db68687a8John Reck{
310e14391e94c850b8bd03680c23b38978db68687a8John Reck}
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::makeRepresentation(DocumentLoader*)
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
31468513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_hasRepresentation = true;
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::forceLayout()
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    FrameView* view = m_frame->view();
321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (view)
32221939df44de1705786c545cd1bf519d47250322dBen Murdoch        view->layout(true);
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::forceLayoutForNonHTML()
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::setCopiesOnScroll()
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Apparently this is mac specific.
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::detachedFromParent2()
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::detachedFromParent3()
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Don't need this one.
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didHandleOnloadEventsForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad()
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didReceiveServerRedirectForProvisionalLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidCancelClientRedirect()
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didCancelClientRedirectForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::dispatchWillPerformClientRedirect(const KURL& url, double, double)
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - willPerformClientRedirectToURL: %s \n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)), qPrintable(drtDescriptionSuitableForTestResult(url)));
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidChangeLocationWithinPage()
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didChangeLocationWithinPageForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!m_webFrame)
387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
3892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_webFrame->d->emitUrlChanged();
390563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_webFrame->page()->d->updateNavigationActions();
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
39368513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(V8)
39468513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid FrameLoaderClientQt::didCreateScriptContextForFrame()
39568513a70bcd92384395513322f1b801e7bf9c729Steve Block{
39668513a70bcd92384395513322f1b801e7bf9c729Steve Block}
39768513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid FrameLoaderClientQt::didDestroyScriptContextForFrame()
39868513a70bcd92384395513322f1b801e7bf9c729Steve Block{
39968513a70bcd92384395513322f1b801e7bf9c729Steve Block}
40068513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid FrameLoaderClientQt::didCreateIsolatedScriptContext()
40168513a70bcd92384395513322f1b801e7bf9c729Steve Block{
40268513a70bcd92384395513322f1b801e7bf9c729Steve Block}
40368513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
40468513a70bcd92384395513322f1b801e7bf9c729Steve Block
405643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClientQt::dispatchDidPushStateWithinPage()
406643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
407643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (dumpFrameLoaderCallbacks)
408643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        printf("%s - dispatchDidPushStateWithinPage\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
409e14391e94c850b8bd03680c23b38978db68687a8John Reck
410643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    notImplemented();
411643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
412643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
413643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClientQt::dispatchDidReplaceStateWithinPage()
414643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
415643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (dumpFrameLoaderCallbacks)
416643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        printf("%s - dispatchDidReplaceStateWithinPage\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
417e14391e94c850b8bd03680c23b38978db68687a8John Reck
418643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    notImplemented();
419643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
420643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
421643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClientQt::dispatchDidPopStateWithinPage()
422643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
423643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (dumpFrameLoaderCallbacks)
424643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        printf("%s - dispatchDidPopStateWithinPage\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
425e14391e94c850b8bd03680c23b38978db68687a8John Reck
426643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    notImplemented();
427643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchWillClose()
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidStartProvisionalLoad()
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didStartProvisionalLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
439e14391e94c850b8bd03680c23b38978db68687a8John Reck    if (dumpUserGestureInFrameLoaderCallbacks)
440e14391e94c850b8bd03680c23b38978db68687a8John Reck        printf("%s - in didStartProvisionalLoadForFrame\n", qPrintable(drtPrintFrameUserGestureStatus(m_frame)));
441e14391e94c850b8bd03680c23b38978db68687a8John Reck
4422bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_lastRequestedUrl = m_frame->loader()->activeDocumentLoader()->requestURL();
4432bde8e466a4451c7319e3a072d118917957d6554Steve Block
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_webFrame)
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        emit m_webFrame->provisionalLoad();
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid FrameLoaderClientQt::dispatchDidReceiveTitle(const StringWithDirection& title)
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: Use direction of title.
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
4532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        printf("%s - didReceiveTitle: %s\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)), qPrintable(QString(title.string())));
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    emit titleChanged(title.string());
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
46221939df44de1705786c545cd1bf519d47250322dBen Murdochvoid FrameLoaderClientQt::dispatchDidChangeIcons()
46321939df44de1705786c545cd1bf519d47250322dBen Murdoch{
46421939df44de1705786c545cd1bf519d47250322dBen Murdoch    if (dumpFrameLoaderCallbacks)
46521939df44de1705786c545cd1bf519d47250322dBen Murdoch        printf("%s - didChangeIcons\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
46621939df44de1705786c545cd1bf519d47250322dBen Murdoch
46721939df44de1705786c545cd1bf519d47250322dBen Murdoch    if (!m_webFrame)
46821939df44de1705786c545cd1bf519d47250322dBen Murdoch        return;
46921939df44de1705786c545cd1bf519d47250322dBen Murdoch
4702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: In order to get notified of icon URLS' changes, add a notification.
47121939df44de1705786c545cd1bf519d47250322dBen Murdoch    // emit iconsChanged();
47221939df44de1705786c545cd1bf519d47250322dBen Murdoch}
47321939df44de1705786c545cd1bf519d47250322dBen Murdoch
47421939df44de1705786c545cd1bf519d47250322dBen Murdoch
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidCommitLoad()
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didCommitLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame->tree()->parent() || !m_webFrame)
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_webFrame->d->emitUrlChanged();
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame->page()->d->updateNavigationActions();
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // We should assume first the frame has no title. If it has, then the above dispatchDidReceiveTitle()
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // will be called very soon with the correct title.
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This properly resets the title when we navigate to a URI without a title.
4892bde8e466a4451c7319e3a072d118917957d6554Steve Block    emit titleChanged(QString());
49006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
49106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    bool isMainFrame = (m_frame == m_frame->page()->mainFrame());
49206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    if (!isMainFrame)
49306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        return;
49406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
49568513a70bcd92384395513322f1b801e7bf9c729Steve Block    emit m_webFrame->page()->viewportChangeRequested();
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didFinishDocumentLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
504635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (QWebPagePrivate::drtRun) {
5050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int unloadEventCount = m_frame->domWindow()->pendingUnloadEventListeners();
506635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (unloadEventCount)
507635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            printf("%s - has %u onunload handler(s)\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)), unloadEventCount);
508635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
509635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame->tree()->parent() || !m_webFrame)
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame->page()->d->updateNavigationActions();
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidFinishLoad()
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didFinishLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
522cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Clears the previous error.
523cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    m_loadError = ResourceError();
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!m_webFrame)
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame->page()->d->updateNavigationActions();
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidFirstLayout()
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
535635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout()
536635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
5376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    if (m_webFrame)
5386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        emit m_webFrame->initialLayoutCompleted();
539635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchShow()
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::cancelPolicyCheck()
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // qDebug() << "FrameLoaderClientQt::cancelPolicyCheck";
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchWillSubmitForm(FramePolicyFunction function,
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                                 PassRefPtr<FormState>)
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
5572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: This is surely too simple.
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    callPolicyFunction(function, PolicyUse);
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidLoadMainResource(DocumentLoader*)
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::revertToProvisionalState(DocumentLoader*)
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
56968513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_hasRepresentation = true;
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::postProgressStartedNotification()
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_webFrame && m_frame->page()) {
5762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // As a new load have started, clear the previous error.
577cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        m_loadError = ResourceError();
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        emit loadStarted();
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        postProgressEstimateChangedNotification();
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame->tree()->parent() || !m_webFrame)
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame->page()->d->updateNavigationActions();
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::postProgressEstimateChangedNotification()
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_webFrame && m_frame->page())
5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        emit loadProgress(qRound(m_frame->page()->progress()->estimatedProgress() * 100));
5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::postProgressFinishedNotification()
5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Send a mousemove event to:
5952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // (1) update the cursor to change according to whatever is underneath the mouse cursor right now;
5962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // (2) display the tool tip if the mouse hovers a node which has a tool tip.
5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame && m_frame->eventHandler() && m_webFrame->page()) {
5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QWidget* view = m_webFrame->page()->view();
5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (view && view->hasFocus()) {
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QPoint localPos = view->mapFromGlobal(QCursor::pos());
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (view->rect().contains(localPos)) {
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                QMouseEvent event(QEvent::MouseMove, localPos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                m_frame->eventHandler()->mouseMoved(PlatformMouseEvent(&event, 0));
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_webFrame && m_frame->page())
609231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        emit loadFinished(m_loadError.isNull());
6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
612231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::setMainFrameDocumentReady(bool)
6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // This is only interesting once we provide an external API for the DOM.
6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::willChangeTitle(DocumentLoader*)
6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // No need for, dispatchDidReceiveTitle is the right callback.
6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
62421939df44de1705786c545cd1bf519d47250322dBen Murdochvoid FrameLoaderClientQt::didChangeTitle(DocumentLoader*)
6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // No need for, dispatchDidReceiveTitle is the right callback.
6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_pluginView) {
63368513a70bcd92384395513322f1b801e7bf9c729Steve Block        // This is necessary to create an empty document. See bug 634004.
6342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // However, we only want to do this if makeRepresentation has been called,
6352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // to match the behavior on the Mac.
63668513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (m_hasRepresentation)
6372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            loader->writer()->setEncoding("", false);
63868513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
64068513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (m_pluginView->isPluginView())
64168513a70bcd92384395513322f1b801e7bf9c729Steve Block        m_pluginView->didFinishLoading();
64268513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_pluginView = 0;
64368513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_hasSentResponseToPlugin = false;
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
64668513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool FrameLoaderClientQt::canShowMIMETypeAsHTML(const String& MIMEType) const
64768513a70bcd92384395513322f1b801e7bf9c729Steve Block{
64868513a70bcd92384395513322f1b801e7bf9c729Steve Block    notImplemented();
64968513a70bcd92384395513322f1b801e7bf9c729Steve Block    return false;
65068513a70bcd92384395513322f1b801e7bf9c729Steve Block}
65168513a70bcd92384395513322f1b801e7bf9c729Steve Block
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::canShowMIMEType(const String& MIMEType) const
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
654545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    String type = MIMEType;
655545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    type.makeLower();
656545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (MIMETypeRegistry::isSupportedImageMIMEType(type))
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
659545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (MIMETypeRegistry::isSupportedNonImageMIMEType(type))
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (m_frame && m_frame->settings()  && m_frame->settings()->arePluginsEnabled()
663545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        && PluginDatabase::installedPlugins()->isMIMETypeRegistered(type))
6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
669231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockbool FrameLoaderClientQt::representationExistsForURLScheme(const String&) const
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
675231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockString FrameLoaderClientQt::generatedMIMETypeForURLScheme(const String&) const
6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return String();
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::frameLoadCompleted()
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Note that this can be called multiple times.
6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::restoreViewState()
6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
690635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!m_webFrame)
691635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
692635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    emit m_webFrame->page()->restoreFrameStateRequested(m_webFrame);
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::provisionalLoadStarted()
6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Don't need to do anything here.
6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::didFinishLoad()
7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // notImplemented();
7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::prepareForDataSourceReplacement()
7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid FrameLoaderClientQt::setTitle(const StringWithDirection& title, const KURL& url)
7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
71468513a70bcd92384395513322f1b801e7bf9c729Steve Block    // Used by Apple WebKit to update the title of an existing history item.
71568513a70bcd92384395513322f1b801e7bf9c729Steve Block    // QtWebKit doesn't accomodate this on history items. If it ever does,
7162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // it should be privateBrowsing-aware. For now, we are just passing
71768513a70bcd92384395513322f1b801e7bf9c729Steve Block    // globalhistory layout tests.
7182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: Use direction of title.
71968513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (dumpHistoryCallbacks) {
72068513a70bcd92384395513322f1b801e7bf9c729Steve Block        printf("WebView updated the title for history URL \"%s\" to \"%s\".\n",
72168513a70bcd92384395513322f1b801e7bf9c729Steve Block            qPrintable(drtDescriptionSuitableForTestResult(url)),
7222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            qPrintable(QString(title.string())));
72368513a70bcd92384395513322f1b801e7bf9c729Steve Block    }
7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString FrameLoaderClientQt::userAgent(const KURL& url)
7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_webFrame) {
7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return m_webFrame->page()->userAgentForUrl(url);
7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return String();
7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidReceiveIcon()
7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (m_webFrame)
7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        emit m_webFrame->iconChanged();
7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::frameLoaderDestroyed()
7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete m_webFrame;
7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_frame = 0;
7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame = 0;
7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete this;
7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::canHandleRequest(const WebCore::ResourceRequest&) const
7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
755643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClientQt::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world)
7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
757643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (world != mainThreadNormalWorld())
758643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
759643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
7602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (m_webFrame)
7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        emit m_webFrame->javaScriptWindowObjectCleared();
7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid FrameLoaderClientQt::documentElementAvailable()
765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return;
767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::didPerformFirstNavigation() const
7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame->tree()->parent() || !m_webFrame)
7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_webFrame->page()->d->updateNavigationActions();
7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7762bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid FrameLoaderClientQt::registerForIconNotification(bool shouldRegister)
7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7782bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(ICONDATABASE)
7792bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (shouldRegister)
7802bde8e466a4451c7319e3a072d118917957d6554Steve Block        connect(IconDatabaseClientQt::instance(), SIGNAL(iconLoadedForPageURL(QString)), this, SLOT(onIconLoadedForPageURL(QString)), Qt::UniqueConnection);
7812bde8e466a4451c7319e3a072d118917957d6554Steve Block    else
7822bde8e466a4451c7319e3a072d118917957d6554Steve Block        disconnect(IconDatabaseClientQt::instance(), SIGNAL(iconLoadedForPageURL(QString)), this, SLOT(onIconLoadedForPageURL(QString)));
7832bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7862bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid FrameLoaderClientQt::onIconLoadedForPageURL(const QString& url)
7872bde8e466a4451c7319e3a072d118917957d6554Steve Block{
7882bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(ICONDATABASE)
7892bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_webFrame && m_webFrame->url() == url)
7902bde8e466a4451c7319e3a072d118917957d6554Steve Block        emit m_webFrame->iconChanged();
7912bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
7922bde8e466a4451c7319e3a072d118917957d6554Steve Block}
7932bde8e466a4451c7319e3a072d118917957d6554Steve Block
7942bde8e466a4451c7319e3a072d118917957d6554Steve Block
795635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClientQt::updateGlobalHistory()
7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QWebHistoryInterface* history = QWebHistoryInterface::defaultInterface();
79868513a70bcd92384395513322f1b801e7bf9c729Steve Block    WebCore::DocumentLoader* loader = m_frame->loader()->documentLoader();
7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (history)
80068513a70bcd92384395513322f1b801e7bf9c729Steve Block        history->addHistoryEntry(loader->urlForHistory().prettyURL());
80168513a70bcd92384395513322f1b801e7bf9c729Steve Block
80268513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (dumpHistoryCallbacks) {
80368513a70bcd92384395513322f1b801e7bf9c729Steve Block        printf("WebView navigated to url \"%s\" with title \"%s\" with HTTP equivalent method \"%s\".  The navigation was %s and was %s%s.\n",
80468513a70bcd92384395513322f1b801e7bf9c729Steve Block            qPrintable(drtDescriptionSuitableForTestResult(loader->urlForHistory())),
8052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            qPrintable(QString(loader->title().string())),
80668513a70bcd92384395513322f1b801e7bf9c729Steve Block            qPrintable(QString(loader->request().httpMethod())),
80768513a70bcd92384395513322f1b801e7bf9c729Steve Block            ((loader->substituteData().isValid() || (loader->response().httpStatusCode() >= 400)) ? "a failure" : "successful"),
80868513a70bcd92384395513322f1b801e7bf9c729Steve Block            ((!loader->clientRedirectSourceForHistory().isEmpty()) ? "a client redirect from " : "not a client redirect"),
80968513a70bcd92384395513322f1b801e7bf9c729Steve Block            (!loader->clientRedirectSourceForHistory().isEmpty()) ? qPrintable(drtDescriptionSuitableForTestResult(loader->clientRedirectSourceForHistory())) : "");
81068513a70bcd92384395513322f1b801e7bf9c729Steve Block    }
811635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
812635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid FrameLoaderClientQt::updateGlobalHistoryRedirectLinks()
814635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
81568513a70bcd92384395513322f1b801e7bf9c729Steve Block    // Apple WebKit is the only port that makes use of this callback. It calls
81668513a70bcd92384395513322f1b801e7bf9c729Steve Block    // WebCore::HistoryItem::addRedirectURL() with the contents of
81768513a70bcd92384395513322f1b801e7bf9c729Steve Block    // loader->[server|client]RedirectDestinationForHistory().
81868513a70bcd92384395513322f1b801e7bf9c729Steve Block    // WebCore can associate a bunch of redirect URLs with a particular
81968513a70bcd92384395513322f1b801e7bf9c729Steve Block    // item in the history, presumably this allows Safari to skip the redirections
82068513a70bcd92384395513322f1b801e7bf9c729Steve Block    // when navigating to that history item. That might be a feature Qt wants to
82168513a70bcd92384395513322f1b801e7bf9c729Steve Block    // offer through QWebHistoryInterface in the future. For now, we're just
82268513a70bcd92384395513322f1b801e7bf9c729Steve Block    // passing tests in LayoutTests/http/tests/globalhistory.
82368513a70bcd92384395513322f1b801e7bf9c729Steve Block    WebCore::DocumentLoader* loader = m_frame->loader()->documentLoader();
82468513a70bcd92384395513322f1b801e7bf9c729Steve Block
82568513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!loader->clientRedirectSourceForHistory().isNull()) {
82668513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (dumpHistoryCallbacks) {
82768513a70bcd92384395513322f1b801e7bf9c729Steve Block            printf("WebView performed a client redirect from \"%s\" to \"%s\".\n",
82868513a70bcd92384395513322f1b801e7bf9c729Steve Block                  qPrintable(QString(loader->clientRedirectSourceForHistory())),
82968513a70bcd92384395513322f1b801e7bf9c729Steve Block                  qPrintable(QString(loader->clientRedirectDestinationForHistory())));
83068513a70bcd92384395513322f1b801e7bf9c729Steve Block        }
83168513a70bcd92384395513322f1b801e7bf9c729Steve Block    }
83268513a70bcd92384395513322f1b801e7bf9c729Steve Block
83368513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!loader->serverRedirectSourceForHistory().isNull()) {
83468513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (dumpHistoryCallbacks) {
83568513a70bcd92384395513322f1b801e7bf9c729Steve Block            printf("WebView performed a server redirect from \"%s\" to \"%s\".\n",
83668513a70bcd92384395513322f1b801e7bf9c729Steve Block                  qPrintable(QString(loader->serverRedirectSourceForHistory())),
83768513a70bcd92384395513322f1b801e7bf9c729Steve Block                  qPrintable(QString(loader->serverRedirectDestinationForHistory())));
83868513a70bcd92384395513322f1b801e7bf9c729Steve Block        }
83968513a70bcd92384395513322f1b801e7bf9c729Steve Block    }
8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem*) const
8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool FrameLoaderClientQt::shouldStopLoadingForHistoryItem(WebCore::HistoryItem*) const
84881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
84981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return true;
85081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
85181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
852ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClientQt::dispatchDidAddBackForwardItem(WebCore::HistoryItem*) const
853ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{
854ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch}
855ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch
856ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClientQt::dispatchDidRemoveBackForwardItem(WebCore::HistoryItem*) const
857ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{
858ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch}
859ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch
860ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClientQt::dispatchDidChangeBackForwardIndex() const
861ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{
862ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch}
863ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch
864231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::didDisplayInsecureContent()
865231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
8668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    if (dumpFrameLoaderCallbacks)
8678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        printf("didDisplayInsecureContent\n");
8688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
869231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    notImplemented();
870231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
871231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
8722fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid FrameLoaderClientQt::didRunInsecureContent(WebCore::SecurityOrigin*, const KURL&)
873231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
8748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    if (dumpFrameLoaderCallbacks)
8758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        printf("didRunInsecureContent\n");
8768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
877231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    notImplemented();
878231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
879231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::saveViewStateToItem(WebCore::HistoryItem* item)
8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHistoryItem historyItem(new QWebHistoryItemPrivate(item));
883635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    emit m_webFrame->page()->saveFrameStateRequested(m_webFrame, &historyItem);
8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::canCachePage() const
8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError& error)
8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
89368513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!m_pluginView)
89468513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
89568513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (m_pluginView->isPluginView())
89668513a70bcd92384395513322f1b801e7bf9c729Steve Block        m_pluginView->didFail(error);
89768513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_pluginView = 0;
89868513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_hasSentResponseToPlugin = false;
8998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
90168513a70bcd92384395513322f1b801e7bf9c729Steve Block// FIXME: This function should be moved into WebCore.
9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
90468513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!m_pluginView)
90568513a70bcd92384395513322f1b801e7bf9c729Steve Block        loader->commitData(data, length);
9068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // We re-check here as the plugin can have been created.
908dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (m_pluginView && m_pluginView->isPluginView()) {
9098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!m_hasSentResponseToPlugin) {
9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_pluginView->didReceiveResponse(loader->response());
9112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            // The function didReceiveResponse sets up a new stream to the plug-in.
9122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            // On a full-page plug-in, a failure in setting up this stream can cause the
9132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            // main document load to be cancelled, setting m_pluginView to null.
9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            if (!m_pluginView)
9150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                return;
9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_hasSentResponseToPlugin = true;
9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_pluginView->didReceiveData(data, length);
9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest& request)
9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
924231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ResourceError error = ResourceError("QtNetwork", QNetworkReply::OperationCanceledError, request.url().prettyURL(),
9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QCoreApplication::translate("QWebFrame", "Request cancelled", 0, QCoreApplication::UnicodeUTF8));
926231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    error.setIsCancellation(true);
927231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return error;
9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// This was copied from file "WebKit/Source/WebKit/mac/Misc/WebKitErrors.h".
9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum {
9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorCannotShowMIMEType =                             100,
9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorCannotShowURL =                                  101,
9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorFrameLoadInterruptedByPolicyChange =             102,
9352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebKitErrorCannotUseRestrictedPort =                        103,
9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorCannotFindPlugIn =                               200,
9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorCannotLoadPlugIn =                               201,
9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebKitErrorJavaUnavailable =                                202,
9396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    WebKitErrorPluginWillHandleLoad =                           203
9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
944e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return ResourceError("WebKitErrorDomain", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QCoreApplication::translate("QWebFrame", "Request blocked", 0, QCoreApplication::UnicodeUTF8));
9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
951e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return ResourceError("WebKitErrorDomain", WebKitErrorCannotShowURL, request.url().string(),
9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QCoreApplication::translate("QWebFrame", "Cannot show URL", 0, QCoreApplication::UnicodeUTF8));
9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
957e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return ResourceError("WebKitErrorDomain", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(),
958231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            QCoreApplication::translate("QWebFrame", "Frame load interrupted by policy change", 0, QCoreApplication::UnicodeUTF8));
9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
963e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return ResourceError("WebKitErrorDomain", WebKitErrorCannotShowMIMEType, response.url().string(),
9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QCoreApplication::translate("QWebFrame", "Cannot show mimetype", 0, QCoreApplication::UnicodeUTF8));
9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse& response)
9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
969231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return ResourceError("QtNetwork", QNetworkReply::ContentNotFoundError, response.url().string(),
9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QCoreApplication::translate("QWebFrame", "File does not exist", 0, QCoreApplication::UnicodeUTF8));
9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerWebCore::ResourceError FrameLoaderClientQt::pluginWillHandleLoadError(const WebCore::ResourceResponse& response)
9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return ResourceError("WebKit", WebKitErrorPluginWillHandleLoad, response.url().string(),
9766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner                         QCoreApplication::translate("QWebFrame", "Loading is handled by the media engine", 0, QCoreApplication::UnicodeUTF8));
9778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
9808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
9828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData)
9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<DocumentLoader> loader = DocumentLoader::create(request, substituteData);
9880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!deferMainResourceDataLoad || substituteData.isValid()) {
9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        loader->setDeferMainResourceDataLoad(false);
9900617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        // Use the default timeout interval for JS as the HTML tokenizer delay. This ensures
9910617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        // that long-running JavaScript will still allow setHtml() to be synchronous, while
9920617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        // still giving a reasonable timeout to prevent deadlock.
99368513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
9940617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        double delay = JSDOMWindowBase::commonJSGlobalData()->timeoutChecker.timeoutInterval() / 1000.0f;
99568513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
99668513a70bcd92384395513322f1b801e7bf9c729Steve Block        // FIXME: Hard coded for now.
99768513a70bcd92384395513322f1b801e7bf9c729Steve Block        double delay = 10000 / 1000.0f;
99868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
9990617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        m_frame->page()->setCustomHTMLTokenizerTimeDelay(delay);
10000617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    } else
10010617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        m_frame->page()->setCustomHTMLTokenizerTimeDelay(-1);
10028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return loader.release();
10038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::download(WebCore::ResourceHandle* handle, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
10068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
10088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QNetworkReplyHandler* handler = handle->getInternal()->m_job;
101181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QNetworkReply* reply = handler->release();
101281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (reply) {
10132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QWebPage* page = m_webFrame->page();
10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (page->forwardUnsupportedContent())
101581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            emit page->unsupportedContent(reply);
10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else
101781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            reply->abort();
10188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1021231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest& request)
10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpResourceLoadCallbacks)
10248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        dumpAssignedUrls[identifier] = drtDescriptionSuitableForTestResult(request.url());
10258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest& newRequest, const WebCore::ResourceResponse& redirectResponse)
10288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QUrl url = newRequest.url();
1030dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
10318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpResourceLoadCallbacks)
10328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - willSendRequest %s redirectResponse %s\n",
10338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project               qPrintable(dumpAssignedUrls[identifier]),
10348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project               qPrintable(drtDescriptionSuitableForTestResult(newRequest)),
1035dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               (redirectResponse.isNull()) ? "(null)" : qPrintable(drtDescriptionSuitableForTestResult(redirectResponse)));
1036dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
10372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (sendRequestReturnsNull) {
1038dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        newRequest.setURL(QUrl());
10392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
10402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
1041dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1042dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (sendRequestReturnsNullOnRedirect && !redirectResponse.isNull()) {
1043dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        printf("Returning null for this redirect\n");
1044dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        newRequest.setURL(QUrl());
10452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
10462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
10472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
10482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (QWebPagePrivate::drtRun
10492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        && url.isValid()
10502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        && (url.scheme().toLower() == QLatin1String("http") || url.scheme().toLower() == QLatin1String("https"))
10512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        && url.host() != QLatin1String("127.0.0.1")
10522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        && url.host() != QLatin1String("255.255.255.255")
10532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        && url.host().toLower() != QLatin1String("localhost")) {
10542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
10552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        printf("Blocked access to external URL %s\n", qPrintable(drtDescriptionSuitableForTestResult(newRequest.url())));
10562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        newRequest.setURL(QUrl());
10572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
1058dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
1059dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1060dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    for (int i = 0; i < sendRequestClearHeaders.size(); ++i)
1061dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block          newRequest.setHTTPHeaderField(sendRequestClearHeaders.at(i).toLocal8Bit().constData(), QString());
10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (QWebPagePrivate::drtRun) {
10642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QMap<QString, QString>::const_iterator it = URLsToRedirect.constFind(url.toString());
10652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (it != URLsToRedirect.constEnd())
10662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            newRequest.setURL(QUrl(it.value()));
10672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
10682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Seems like the Mac code doesn't do anything here by default neither.
10692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << url;
10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool FrameLoaderClientQt::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
1073635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1074635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    notImplemented();
1075635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return false;
1076635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1077635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
10788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
10798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid FrameLoaderClientQt::dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse& response)
10898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_response = response;
1092dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (dumpResourceLoadCallbacks)
1093dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        printf("%s - didReceiveResponse %s\n",
1094dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               qPrintable(dumpAssignedUrls[identifier]),
1095dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               qPrintable(drtDescriptionSuitableForTestResult(response)));
1096ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1097ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (dumpResourceResponseMIMETypes) {
1098ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        printf("%s has MIME type %s\n",
10992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch               qPrintable(QString(response.url().lastPathComponent())),
1100ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block               qPrintable(QString(response.mimeType())));
1101ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
11028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long, int)
11058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier)
11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (dumpResourceLoadCallbacks)
1111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        printf("%s - didFinishLoading\n",
1112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               (dumpAssignedUrls.contains(identifier) ? qPrintable(dumpAssignedUrls[identifier]) : "<unknown>"));
11138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long identifier, const WebCore::ResourceError& error)
11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpResourceLoadCallbacks)
1118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        printf("%s - didFailLoadingWithError: %s\n",
1119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               (dumpAssignedUrls.contains(identifier) ? qPrintable(dumpAssignedUrls[identifier]) : "<unknown>"),
1120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block               qPrintable(drtDescriptionSuitableForTestResult(error)));
11218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
11248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
11268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
11278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::callErrorPageExtension(const WebCore::ResourceError& error)
1130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
1131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QWebPage* page = m_webFrame->page();
1132231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (page->supportsExtension(QWebPage::ErrorPageExtension)) {
1133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QWebPage::ErrorPageExtensionOption option;
1134231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1135231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (error.domain() == "QtNetwork")
1136231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            option.domain = QWebPage::QtNetwork;
1137231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        else if (error.domain() == "HTTP")
1138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            option.domain = QWebPage::Http;
1139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        else if (error.domain() == "WebKit")
1140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            option.domain = QWebPage::WebKit;
1141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        else
1142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return;
1143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        option.url = QUrl(error.failingURL());
1145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        option.frame = m_webFrame;
1146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        option.error = error.errorCode();
1147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        option.errorString = error.localizedDescription();
1148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QWebPage::ErrorPageExtensionReturn output;
1150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (!page->extension(QWebPage::ErrorPageExtension, &option, &output))
1151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return;
1152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        KURL baseUrl(output.baseUrl);
1154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        KURL failingUrl(option.url);
1155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        WebCore::ResourceRequest request(baseUrl);
1157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(output.content.constData(), output.content.length());
1158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        WebCore::SubstituteData substituteData(buffer, output.contentType, output.encoding, failingUrl);
1159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        m_frame->loader()->load(request, substituteData, false);
1160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
1162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::ResourceError& error)
11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didFailProvisionalLoadWithError\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_loadError = error;
1169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!error.isNull() && !error.isCancellation())
1170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        callErrorPageExtension(error);
11718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError& error)
11748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (dumpFrameLoaderCallbacks)
11768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        printf("%s - didFailLoadWithError\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame)));
11778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_loadError = error;
1179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!error.isNull() && !error.isCancellation())
1180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        callErrorPageExtension(error);
11818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1183e14391e94c850b8bd03680c23b38978db68687a8John ReckWebCore::Frame* FrameLoaderClientQt::dispatchCreatePage(const WebCore::NavigationAction&)
11848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
11868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
11878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebPage *newPage = m_webFrame->page()->createWindow(QWebPage::WebBrowserWindow);
11888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!newPage)
11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return newPage->mainFrame()->d->frame;
11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
119381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid FrameLoaderClientQt::dispatchDecidePolicyForResponse(FramePolicyFunction function, const WebCore::ResourceResponse& response, const WebCore::ResourceRequest&)
11948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // We need to call directly here.
1196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (WebCore::contentDispositionType(response.httpHeaderField("Content-Disposition")) == WebCore::ContentDispositionAttachment)
1197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        callPolicyFunction(function, PolicyDownload);
119881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    else if (canShowMIMEType(response.mimeType()))
11990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        callPolicyFunction(function, PolicyUse);
12008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else
12010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        callPolicyFunction(function, PolicyDownload);
12028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1204dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, PassRefPtr<WebCore::FormState>, const WTF::String&)
12058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT(m_webFrame);
1207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QNetworkRequest r(request.toNetworkRequest(m_webFrame));
12088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebPage* page = m_webFrame->page();
12098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!page->d->acceptNavigationRequest(0, r, QWebPage::NavigationType(action.type()))) {
12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted)
12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_frame->loader()->resetMultipleFormSubmissionProtection();
1213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) {
1215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            ResourceRequest emptyRequest;
1216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest);
1217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
1218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
12190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        callPolicyFunction(function, PolicyIgnore);
12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
12218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
12220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    callPolicyFunction(function, PolicyUse);
12238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, PassRefPtr<WebCore::FormState>)
12268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT(m_webFrame);
1228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QNetworkRequest r(request.toNetworkRequest(m_webFrame));
12298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebPage*page = m_webFrame->page();
1230ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    PolicyAction result;
1231ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
12322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Currently, this is only enabled by DRT.
1233ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    if (policyDelegateEnabled) {
1234ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        RefPtr<Node> node;
1235ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        for (const Event* event = action.event(); event; event = event->underlyingEvent()) {
1236ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block            if (event->isMouseEvent()) {
1237ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block                const MouseEvent* mouseEvent =  static_cast<const MouseEvent*>(event);
1238ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block                node = QWebFramePrivate::core(m_webFrame)->eventHandler()->hitTestResultAtPoint(
1239ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block                    mouseEvent->absoluteLocation(), false).innerNonSharedNode();
1240ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block                break;
1241ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block            }
1242ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        }
1243ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1244ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        printf("Policy delegate: attempt to load %s with navigation type '%s'%s\n",
1245ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block               qPrintable(drtDescriptionSuitableForTestResult(request.url())), navigationTypeToString(action.type()),
12462bde8e466a4451c7319e3a072d118917957d6554Steve Block               (node) ? qPrintable(QString::fromLatin1(" originating from ") + drtDescriptionSuitableForTestResult(node, 0)) : "");
1247ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1248ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        if (policyDelegatePermissive)
1249ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block            result = PolicyUse;
1250ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        else
1251ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block            result = PolicyIgnore;
1252ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
1253ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        callPolicyFunction(function, result);
1254ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        return;
1255ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    }
12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!page->d->acceptNavigationRequest(m_webFrame, r, QWebPage::NavigationType(action.type()))) {
12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (action.type() == NavigationTypeFormSubmitted || action.type() == NavigationTypeFormResubmitted)
12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            m_frame->loader()->resetMultipleFormSubmissionProtection();
1260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (action.type() == NavigationTypeLinkClicked && r.url().hasFragment()) {
1262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            ResourceRequest emptyRequest;
1263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            m_frame->loader()->activeDocumentLoader()->setLastCheckedRequest(emptyRequest);
1264635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
1265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
12660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        callPolicyFunction(function, PolicyIgnore);
12678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
12688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
12690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    callPolicyFunction(function, PolicyUse);
12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::dispatchUnableToImplementPolicy(const WebCore::ResourceError&)
12738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::startDownload(const WebCore::ResourceRequest& request)
12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    emit m_webFrame->page()->downloadRequested(request.toNetworkRequest(m_webFrame));
12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<Frame> FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
12868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                        const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
12878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
12898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
12908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFrameData frameData(m_frame->page(), m_frame, ownerElement, name);
1292d0825bca7fe65beaee391d30da42e937db621564Steve Block
1293d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (url.isEmpty())
1294d0825bca7fe65beaee391d30da42e937db621564Steve Block        frameData.url = blankURL();
1295d0825bca7fe65beaee391d30da42e937db621564Steve Block    else
1296d0825bca7fe65beaee391d30da42e937db621564Steve Block        frameData.url = url;
1297d0825bca7fe65beaee391d30da42e937db621564Steve Block
12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frameData.referrer = referrer;
12998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frameData.allowsScrolling = allowsScrolling;
13008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frameData.marginWidth = marginWidth;
13018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frameData.marginHeight = marginHeight;
13028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QPointer<QWebFrame> webFrame = new QWebFrame(m_webFrame, &frameData);
13040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // The creation of the frame may have run arbitrary JavaScript that removed it from the page already.
13050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!webFrame->d->frame->page()) {
13060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        frameData.frame.release();
13070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ASSERT(webFrame.isNull());
13080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return 0;
13090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
13108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    emit m_webFrame->page()->frameCreated(webFrame);
13128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: Set override encoding if we have one.
13148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1315e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    m_frame->loader()->loadURLIntoChildFrame(frameData.url, frameData.referrer, frameData.frame.get());
13168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // The frame's onload handler may have removed it from the document.
13180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!frameData.frame->tree()->parent())
13198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
13208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return frameData.frame.release();
13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid FrameLoaderClientQt::didTransferChildFrameToNewDocument(Page*)
1325692e5dbf12901edacf14812a6fae25462920af42Steve Block{
1326692e5dbf12901edacf14812a6fae25462920af42Steve Block    ASSERT(m_frame->ownerElement());
1327692e5dbf12901edacf14812a6fae25462920af42Steve Block
1328692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (!m_webFrame)
1329692e5dbf12901edacf14812a6fae25462920af42Steve Block        return;
1330692e5dbf12901edacf14812a6fae25462920af42Steve Block
1331692e5dbf12901edacf14812a6fae25462920af42Steve Block    Frame* parentFrame = m_webFrame->d->frame->tree()->parent();
1332692e5dbf12901edacf14812a6fae25462920af42Steve Block    ASSERT(parentFrame);
1333692e5dbf12901edacf14812a6fae25462920af42Steve Block
1334692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (QWebFrame* parent = QWebFramePrivate::kit(parentFrame)) {
1335692e5dbf12901edacf14812a6fae25462920af42Steve Block        m_webFrame->d->setPage(parent->page());
1336692e5dbf12901edacf14812a6fae25462920af42Steve Block
1337692e5dbf12901edacf14812a6fae25462920af42Steve Block        if (m_webFrame->parent() != qobject_cast<QObject*>(parent))
1338692e5dbf12901edacf14812a6fae25462920af42Steve Block            m_webFrame->setParent(parent);
1339692e5dbf12901edacf14812a6fae25462920af42Steve Block    }
1340692e5dbf12901edacf14812a6fae25462920af42Steve Block}
1341692e5dbf12901edacf14812a6fae25462920af42Steve Block
1342e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid FrameLoaderClientQt::transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*)
1343e14391e94c850b8bd03680c23b38978db68687a8John Reck{
1344e14391e94c850b8bd03680c23b38978db68687a8John Reck}
1345e14391e94c850b8bd03680c23b38978db68687a8John Reck
13462bde8e466a4451c7319e3a072d118917957d6554Steve BlockObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const String& mimeTypeIn, bool shouldPreferPlugInsForImages)
13478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // qDebug()<<" ++++++++++++++++ url is "<<url.prettyURL()<<", mime = "<<mimeTypeIn;
134965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    QFileInfo fi(url.path());
135065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String extension = fi.suffix();
13512bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (mimeTypeIn == "application/x-qt-plugin" || mimeTypeIn == "application/x-qt-styled-widget")
13528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return ObjectContentOtherPlugin;
13538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13542bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (url.isEmpty() && !mimeTypeIn.length())
13558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return ObjectContentNone;
13568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13572bde8e466a4451c7319e3a072d118917957d6554Steve Block    String mimeType = mimeTypeIn;
135865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!mimeType.length())
135965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension);
136065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
136165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!mimeType.length())
136265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        mimeType = PluginDatabase::installedPlugins()->MIMETypeForExtension(extension);
13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!mimeType.length())
13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return ObjectContentFrame;
13668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13672bde8e466a4451c7319e3a072d118917957d6554Steve Block    ObjectContentType plugInType = ObjectContentNone;
13688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (PluginDatabase::installedPlugins()->isMIMETypeRegistered(mimeType))
13692bde8e466a4451c7319e3a072d118917957d6554Steve Block        plugInType = ObjectContentNetscapePlugin;
13702bde8e466a4451c7319e3a072d118917957d6554Steve Block    else if (m_frame->page() && m_frame->page()->pluginData() && m_frame->page()->pluginData()->supportsMimeType(mimeType))
13712bde8e466a4451c7319e3a072d118917957d6554Steve Block        plugInType = ObjectContentOtherPlugin;
13722bde8e466a4451c7319e3a072d118917957d6554Steve Block
13732bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
13742bde8e466a4451c7319e3a072d118917957d6554Steve Block        return shouldPreferPlugInsForImages && plugInType != ObjectContentNone ? plugInType : ObjectContentImage;
13752bde8e466a4451c7319e3a072d118917957d6554Steve Block
13762bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (plugInType != ObjectContentNone)
13772bde8e466a4451c7319e3a072d118917957d6554Steve Block        return plugInType;
13788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
13808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return ObjectContentFrame;
13818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (url.protocol() == "about")
13838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return ObjectContentFrame;
13848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ObjectContentNone;
13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const CSSPropertyID qstyleSheetProperties[] = {
13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CSSPropertyColor,
13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CSSPropertyFontFamily,
13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CSSPropertyFontSize,
13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CSSPropertyFontStyle,
13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CSSPropertyFontWeight
13948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
13958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst unsigned numqStyleSheetProperties = sizeof(qstyleSheetProperties) / sizeof(qstyleSheetProperties[0]);
13978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtPluginWidget: public Widget
13998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
14008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
14018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtPluginWidget(QWidget* w = 0): Widget(w) {}
1402635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    ~QtPluginWidget()
1403635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
1404635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (platformWidget())
1405635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            platformWidget()->deleteLater();
1406635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void invalidateRect(const IntRect& r)
14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (platformWidget())
14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            platformWidget()->update(r);
14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1412635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void frameRectsChanged()
1413635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    {
1414635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (!platformWidget())
1415635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            return;
1416635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1417635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        IntRect windowRect = convertToContainingWindow(IntRect(0, 0, frameRect().width(), frameRect().height()));
1418635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        platformWidget()->setGeometry(windowRect);
1419635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1420635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        ScrollView* parentScrollView = parent();
1421635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (!parentScrollView)
1422635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            return;
1423635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1424635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        ASSERT(parentScrollView->isFrameView());
1425635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        IntRect clipRect(static_cast<FrameView*>(parentScrollView)->windowClipRect());
1426635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        clipRect.move(-windowRect.x(), -windowRect.y());
1427635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        clipRect.intersect(platformWidget()->rect());
14280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QRegion clipRegion = QRegion(clipRect);
14300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        platformWidget()->setMask(clipRegion);
14310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1432643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        handleVisibility();
1433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        platformWidget()->update();
1435643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
1436643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1437643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void show()
1438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
1439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        Widget::show();
1440643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        handleVisibility();
1441643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
1442643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1443643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate:
1444643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void handleVisibility()
1445643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
1446643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (!isVisible())
1447643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            return;
1448643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
14492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // If setMask is set with an empty QRegion, no clipping will
14502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // be performed, so in that case we hide the platformWidget.
1451643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        QRegion mask = platformWidget()->mask();
1452643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        platformWidget()->setVisible(!mask.isEmpty());
1453635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
145665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(QT_NO_GRAPHICSVIEW)
1457231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass QtPluginGraphicsWidget: public Widget
1458231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
1459231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockpublic:
1460231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    static RefPtr<QtPluginGraphicsWidget> create(QGraphicsWidget* w = 0)
1461231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1462231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return adoptRef(new QtPluginGraphicsWidget(w));
1463231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1464231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1465231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ~QtPluginGraphicsWidget()
1466231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1467231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (graphicsWidget)
1468231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            graphicsWidget->deleteLater();
1469231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1470231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void invalidateRect(const IntRect& r)
1471231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1472231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        QGraphicsScene* scene = graphicsWidget ? graphicsWidget->scene() : 0;
1473231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (scene)
1474231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            scene->update(QRect(r));
1475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1476231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void frameRectsChanged()
1477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1478231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (!graphicsWidget)
1479231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return;
1480231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1481231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        IntRect windowRect = convertToContainingWindow(IntRect(0, 0, frameRect().width(), frameRect().height()));
1482231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        graphicsWidget->setGeometry(QRect(windowRect));
1483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
14842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // FIXME: Make the code handle clipping of graphics widgets.
1485231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1486231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void show()
1487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1488231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (graphicsWidget)
1489231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            graphicsWidget->show();
1490231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1491231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void hide()
1492231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    {
1493231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (graphicsWidget)
1494231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            graphicsWidget->hide();
1495231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
1496231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockprivate:
1497cad810f21b803229eb11403f9209855525a25d57Steve Block    QtPluginGraphicsWidget(QGraphicsWidget* w = 0)
1498cad810f21b803229eb11403f9209855525a25d57Steve Block        : Widget(0)
1499cad810f21b803229eb11403f9209855525a25d57Steve Block        , graphicsWidget(w)
1500cad810f21b803229eb11403f9209855525a25d57Steve Block    {
1501cad810f21b803229eb11403f9209855525a25d57Steve Block        setBindingObject(graphicsWidget);
1502cad810f21b803229eb11403f9209855525a25d57Steve Block    }
1503231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1504231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QGraphicsWidget* graphicsWidget;
1505231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block};
150665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // QT_NO_GRAPHICSVIEW
1507231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
15080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames,
15098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                          const Vector<String>& paramValues, const String& mimeType, bool loadManually)
15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
15112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // qDebug()<<"------ Creating plugin in FrameLoaderClientQt::createPlugin for "<<url.prettyURL() << mimeType;
15122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // qDebug()<<"------\t url = "<<url.prettyURL();
15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_webFrame)
15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QStringList params;
15188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QStringList values;
15198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QString classid(element->getAttribute("classid"));
15208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1521231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (unsigned i = 0; i < paramNames.size(); ++i) {
15228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        params.append(paramNames[i]);
15238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (paramNames[i] == "classid")
15248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            classid = paramValues[i];
15258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1526231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (unsigned i = 0; i < paramValues.size(); ++i)
15278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        values.append(paramValues[i]);
15288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QString urlStr(url.string());
15308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QUrl qurl = urlStr;
15318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
153265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    QObject* object = 0;
153365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType == "application/x-qt-plugin" || mimeType == "application/x-qt-styled-widget") {
153565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        object = m_webFrame->page()->createPlugin(classid, qurl, params, values);
15368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QT_NO_STYLE_STYLESHEET
1537635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        QWidget* widget = qobject_cast<QWidget*>(object);
15388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (widget && mimeType == "application/x-qt-styled-widget") {
15398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            QString styleSheet = element->getAttribute("style");
15418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (!styleSheet.isEmpty())
15428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                styleSheet += QLatin1Char(';');
15438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1544231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            for (unsigned i = 0; i < numqStyleSheetProperties; ++i) {
15458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                CSSPropertyID property = qstyleSheetProperties[i];
15468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1547bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                styleSheet += QString::fromLatin1(getPropertyName(property));
15488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                styleSheet += QLatin1Char(':');
15498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                styleSheet += computedStyle(element)->getPropertyValue(property);
15508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                styleSheet += QLatin1Char(';');
15518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
15528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            widget->setStyleSheet(styleSheet);
15548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
15558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // QT_NO_STYLE_STYLESHEET
155665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
15578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!object) {
15592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        QWebPluginFactory* factory = m_webFrame->page()->pluginFactory();
15602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (factory)
15612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            object = factory->create(mimeType, qurl, params, values);
15622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
15638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (object) {
15652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        QWidget* widget = qobject_cast<QWidget*>(object);
15662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (widget) {
15672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            QWidget* parentWidget = 0;
15682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            if (m_webFrame->page()->d->client)
15692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                parentWidget = qobject_cast<QWidget*>(m_webFrame->page()->d->client->pluginParent());
15702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            if (parentWidget) // Don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
15712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                widget->setParent(parentWidget);
15722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            widget->hide();
15732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            RefPtr<QtPluginWidget> w = adoptRef(new QtPluginWidget());
15742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            w->setPlatformWidget(widget);
15752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            // Make sure it's invisible until properly placed into the layout.
15762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            w->setFrameRect(IntRect(0, 0, 0, 0));
15772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            return w;
15782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        }
1579bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
158065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(QT_NO_GRAPHICSVIEW)
15812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        QGraphicsWidget* graphicsWidget = qobject_cast<QGraphicsWidget*>(object);
15822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (graphicsWidget) {
15832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            QGraphicsObject* parentWidget = 0;
15842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            if (m_webFrame->page()->d->client)
15852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                parentWidget = qobject_cast<QGraphicsObject*>(m_webFrame->page()->d->client->pluginParent());
15862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            graphicsWidget->hide();
15872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            if (parentWidget) // Don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose.
15882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                graphicsWidget->setParentItem(parentWidget);
15892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            RefPtr<QtPluginGraphicsWidget> w = QtPluginGraphicsWidget::create(graphicsWidget);
15902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            // Make sure it's invisible until properly placed into the layout.
15912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            w->setFrameRect(IntRect(0, 0, 0, 0));
15922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            return w;
15932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        }
159465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // QT_NO_GRAPHICSVIEW
1595bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
15962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // FIXME: Make things work for widgetless plugins as well.
15972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        delete object;
1598e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    }
1599e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(NETSCAPE_PLUGIN_API)
1600e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    else { // NPAPI Plugins
1601643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        Vector<String> params = paramNames;
1602643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        Vector<String> values = paramValues;
1603643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (mimeType == "application/x-shockwave-flash") {
1604f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            QWebPageClient* client = m_webFrame->page()->d->client.get();
1605e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            const bool isQWebView = client && qobject_cast<QWidget*>(client->pluginParent());
1606bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO >= 5)
1607e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            size_t wmodeIndex = params.find("wmode");
1608e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            if (wmodeIndex == -1) {
16092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                // Disable XEmbed mode and force it to opaque mode.
1610e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                params.append("wmode");
1611e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                values.append("opaque");
1612e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            } else if (!isQWebView) {
16132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                // Disable transparency if client is not a QWebView.
1614e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                values[wmodeIndex] = "opaque";
1615e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            }
1616e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#else
1617e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            if (!isQWebView) {
16182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                // Inject wmode=opaque when there is no client or the client is not a QWebView.
1619643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                size_t wmodeIndex = params.find("wmode");
1620643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                if (wmodeIndex == -1) {
1621643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                    params.append("wmode");
1622643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                    values.append("opaque");
16232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                } else if (equalIgnoringCase(values[wmodeIndex], "window"))
1624643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                    values[wmodeIndex] = "opaque";
1625643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            }
1626e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif
1627643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        }
1628643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
16290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<PluginView> pluginView = PluginView::create(m_frame, pluginSize, element, url,
1630643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            params, values, mimeType, loadManually);
16318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return pluginView;
16328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1633e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // ENABLE(NETSCAPE_PLUGIN_API)
16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
16368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClientQt::redirectDataToPlugin(Widget* pluginWidget)
16398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(!m_pluginView);
16418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_pluginView = static_cast<PluginView*>(pluginWidget);
16428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_hasSentResponseToPlugin = false;
16438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassRefPtr<Widget> FrameLoaderClientQt::createJavaAppletWidget(const IntSize& pluginSize, HTMLAppletElement* element, const KURL& url,
16466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                    const Vector<String>& paramNames, const Vector<String>& paramValues)
16478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    return createPlugin(pluginSize, element, url, paramNames, paramValues, "application/x-java-applet", true);
16498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString FrameLoaderClientQt::overrideMediaType() const
16528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return String();
16548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString FrameLoaderClientQt::chooseFile(const QString& oldFile)
16578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
165868513a70bcd92384395513322f1b801e7bf9c729Steve Block    return m_webFrame->page()->chooseFile(m_webFrame, oldFile);
16598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickPassRefPtr<FrameNetworkingContext> FrameLoaderClientQt::createNetworkingContext()
16625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
16632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVariant value = m_webFrame->page()->property("_q_MIMESniffingDisabled");
16642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool MIMESniffingDisabled = value.isValid() && value.toBool();
16652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
16662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return FrameNetworkingContextQt::create(m_frame, m_webFrame, !MIMESniffingDisabled, m_webFrame->page()->networkAccessManager());
16675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
16685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "moc_FrameLoaderClientQt.cpp"
1672