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