2 * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 * Copyright (C) 2007 Trolltech ASA
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include "CSSComputedStyleDeclaration.h"
32 #include "CSSPropertyNames.h"
33 #include "FrameLoaderClientQt.h"
34 #include "FrameTree.h"
35 #include "FrameView.h"
36 #include "DocumentLoader.h"
37 #include "MIMETypeRegistry.h"
38 #include "ResourceResponse.h"
40 #include "ProgressTracker.h"
41 #include "ResourceRequest.h"
42 #include "HistoryItem.h"
43 #include "HTMLFormElement.h"
44 #include "NotImplemented.h"
47 #include "qwebframe.h"
48 #include "qwebframe_p.h"
49 #include "qwebobjectplugin_p.h"
50 #include "qwebnetworkinterface_p.h"
52 #include <qfileinfo.h>
59 FrameLoaderClientQt::FrameLoaderClientQt()
65 connect(this, SIGNAL(sigCallPolicyFunction(int)), this, SLOT(slotCallPolicyFunction(int)), Qt::QueuedConnection);
69 FrameLoaderClientQt::~FrameLoaderClientQt()
73 void FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame)
75 m_webFrame = webFrame;
77 if (!m_webFrame || !m_webFrame->page()) {
78 qWarning("FrameLoaderClientQt::setFrame frame without Page!");
82 connect(this, SIGNAL(loadStarted(QWebFrame*)),
83 m_webFrame->page(), SIGNAL(loadStarted(QWebFrame *)));
84 connect(this, SIGNAL(loadProgressChanged(int)),
85 m_webFrame->page(), SIGNAL(loadProgressChanged(int)));
86 connect(this, SIGNAL(loadFinished(QWebFrame*)),
87 m_webFrame->page(), SIGNAL(loadFinished(QWebFrame *)));
88 connect(this, SIGNAL(titleChanged(const QString&)),
89 m_webFrame, SIGNAL(titleChanged(const QString&)));
92 QWebFrame* FrameLoaderClientQt::webFrame() const
97 void FrameLoaderClientQt::callPolicyFunction(FramePolicyFunction function, PolicyAction action)
99 ASSERT(!m_policyFunction);
102 m_policyFunction = function;
103 emit sigCallPolicyFunction(action);
106 void FrameLoaderClientQt::slotCallPolicyFunction(int action)
108 if (!m_frame || !m_policyFunction)
110 FramePolicyFunction function = m_policyFunction;
111 m_policyFunction = 0;
112 (m_frame->loader()->*function)(WebCore::PolicyAction(action));
115 bool FrameLoaderClientQt::hasWebView() const
122 bool FrameLoaderClientQt::hasFrameView() const
129 bool FrameLoaderClientQt::hasBackForwardList() const
136 void FrameLoaderClientQt::resetBackForwardList()
142 bool FrameLoaderClientQt::provisionalItemIsTarget() const
149 bool FrameLoaderClientQt::loadProvisionalItemFromPageCache()
156 void FrameLoaderClientQt::invalidateCurrentItemPageCache()
162 void FrameLoaderClientQt::makeDocumentView()
164 // qDebug() << "FrameLoaderClientQt::makeDocumentView" << m_frame->document();
166 // if (!m_frame->document())
167 // m_frame->loader()->createEmptyDocument();
171 void FrameLoaderClientQt::makeRepresentation(DocumentLoader*)
173 // don't need this for now I think.
177 void FrameLoaderClientQt::forceLayout()
179 m_frame->view()->setNeedsLayout();
180 m_frame->view()->layout();
184 void FrameLoaderClientQt::forceLayoutForNonHTML()
190 void FrameLoaderClientQt::setCopiesOnScroll()
192 // apparently mac specific
196 LoadErrorResetToken* FrameLoaderClientQt::tokenForLoadErrorReset()
203 void FrameLoaderClientQt::resetAfterLoadError(LoadErrorResetToken*)
209 void FrameLoaderClientQt::doNotResetAfterLoadError(LoadErrorResetToken*)
215 void FrameLoaderClientQt::willCloseDocument()
220 void FrameLoaderClientQt::detachedFromParent2()
226 void FrameLoaderClientQt::detachedFromParent3()
231 void FrameLoaderClientQt::detachedFromParent4()
235 m_webFrame->d->frame = 0;
236 m_webFrame->d->frameView = 0;
242 void FrameLoaderClientQt::loadedFromCachedPage()
248 void FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
250 // don't need this one
254 void FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad()
260 void FrameLoaderClientQt::dispatchDidCancelClientRedirect()
266 void FrameLoaderClientQt::dispatchWillPerformClientRedirect(const KURL&,
274 void FrameLoaderClientQt::dispatchDidChangeLocationWithinPage()
280 void FrameLoaderClientQt::dispatchWillClose()
286 void FrameLoaderClientQt::dispatchDidStartProvisionalLoad()
289 emit m_webFrame->provisionalLoad();
293 void FrameLoaderClientQt::dispatchDidReceiveTitle(const String& title)
296 emit titleChanged(t);
300 void FrameLoaderClientQt::dispatchDidCommitLoad()
302 if (m_frame->tree()->parent())
304 m_webFrame->page()->d->updateNavigationActions();
308 void FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
310 if (m_frame->tree()->parent())
312 m_webFrame->page()->d->updateNavigationActions();
316 void FrameLoaderClientQt::dispatchDidFinishLoad()
319 emit m_webFrame->loadDone(true);
320 if (m_frame->tree()->parent())
322 m_webFrame->page()->d->updateNavigationActions();
326 void FrameLoaderClientQt::dispatchDidFirstLayout()
329 emit m_webFrame->page()->initialLayoutComplete();
333 void FrameLoaderClientQt::dispatchShow()
339 void FrameLoaderClientQt::cancelPolicyCheck()
341 // qDebug() << "FrameLoaderClientQt::cancelPolicyCheck";
342 m_policyFunction = 0;
346 void FrameLoaderClientQt::dispatchWillSubmitForm(FramePolicyFunction function,
347 PassRefPtr<FormState>)
350 Q_ASSERT(!m_policyFunction);
351 // FIXME: This is surely too simple
352 callPolicyFunction(function, PolicyUse);
356 void FrameLoaderClientQt::dispatchDidLoadMainResource(DocumentLoader*)
362 void FrameLoaderClientQt::clearLoadingFromPageCache(DocumentLoader*)
368 bool FrameLoaderClientQt::isLoadingFromPageCache(DocumentLoader*)
375 void FrameLoaderClientQt::revertToProvisionalState(DocumentLoader*)
381 void FrameLoaderClientQt::clearUnarchivingState(DocumentLoader*)
387 void FrameLoaderClientQt::postProgressStartedNotification()
389 if (m_webFrame && m_frame->page())
390 emit loadStarted(m_webFrame);
391 if (m_frame->tree()->parent())
393 m_webFrame->page()->d->updateNavigationActions();
396 void FrameLoaderClientQt::postProgressEstimateChangedNotification()
398 if (m_webFrame && m_frame->page())
399 emit loadProgressChanged(qRound(m_frame->page()->progress()->estimatedProgress() * 100));
402 void FrameLoaderClientQt::postProgressFinishedNotification()
404 if (m_webFrame && m_frame->page())
405 emit loadFinished(m_webFrame);
408 void FrameLoaderClientQt::setMainFrameDocumentReady(bool b)
410 // this is only interesting once we provide an external API for the DOM
414 void FrameLoaderClientQt::willChangeTitle(DocumentLoader*)
420 void FrameLoaderClientQt::didChangeTitle(DocumentLoader *)
422 // no need for, dispatchDidReceiveTitle is the right callback
426 void FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
429 FrameLoader *fl = loader->frameLoader();
430 fl->setEncoding(m_response.textEncodingName(), false);
436 void FrameLoaderClientQt::finalSetupForReplace(DocumentLoader*)
442 void FrameLoaderClientQt::setDefersLoading(bool)
448 bool FrameLoaderClientQt::isArchiveLoadPending(ResourceLoader*) const
455 void FrameLoaderClientQt::cancelPendingArchiveLoad(ResourceLoader*)
461 void FrameLoaderClientQt::clearArchivedResources()
463 // don't think we need to do anything here currently
467 bool FrameLoaderClientQt::canShowMIMEType(const String& MIMEType) const
469 if (MIMETypeRegistry::isSupportedImageMIMEType(MIMEType))
472 if (MIMETypeRegistry::isSupportedNonImageMIMEType(MIMEType))
478 bool FrameLoaderClientQt::representationExistsForURLScheme(const String& URLScheme) const
481 // qDebug() << " scheme is" << URLScheme;
486 String FrameLoaderClientQt::generatedMIMETypeForURLScheme(const String& URLScheme) const
493 void FrameLoaderClientQt::frameLoadCompleted()
495 // Note: Can be called multiple times.
496 // Even if already complete, we might have set a previous item on a frame that
497 // didn't do any data loading on the past transaction. Make sure to clear these out.
498 m_frame->loader()->setPreviousHistoryItem(0);
502 void FrameLoaderClientQt::restoreViewState()
508 void FrameLoaderClientQt::provisionalLoadStarted()
510 // don't need to do anything here
514 bool FrameLoaderClientQt::shouldTreatURLAsSameAsCurrent(const KURL&) const
521 void FrameLoaderClientQt::addHistoryItemForFragmentScroll()
527 void FrameLoaderClientQt::didFinishLoad()
533 void FrameLoaderClientQt::prepareForDataSourceReplacement()
535 m_frame->loader()->detachChildren();
538 void FrameLoaderClientQt::setTitle(const String&, const KURL&)
540 // no need for, dispatchDidReceiveTitle is the right callback
544 String FrameLoaderClientQt::userAgent(const KURL& url)
547 return m_webFrame->page()->userAgentFor(QUrl((QString)url.url()));
552 void FrameLoaderClientQt::dispatchDidReceiveIcon()
555 emit m_webFrame->page()->iconLoaded();
559 void FrameLoaderClientQt::frameLoaderDestroyed()
561 Q_ASSERT(m_webFrame == 0);
562 Q_ASSERT(m_frame == 0);
566 bool FrameLoaderClientQt::canHandleRequest(const WebCore::ResourceRequest&) const
571 void FrameLoaderClientQt::windowObjectCleared()
574 emit m_webFrame->cleared();
577 void FrameLoaderClientQt::didPerformFirstNavigation() const
579 if (m_frame->tree()->parent())
581 m_webFrame->page()->d->updateNavigationActions();
584 void FrameLoaderClientQt::registerForIconNotification(bool)
589 void FrameLoaderClientQt::setDocumentViewFromCachedPage(CachedPage*)
594 void FrameLoaderClientQt::updateGlobalHistoryForStandardLoad(const WebCore::KURL& url)
596 emit m_webFrame->page()->addToHistory(QUrl(url.prettyURL()));
599 void FrameLoaderClientQt::updateGlobalHistoryForReload(const WebCore::KURL&)
604 bool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem *item) const
612 void FrameLoaderClientQt::saveViewStateToItem(WebCore::HistoryItem*)
617 void FrameLoaderClientQt::saveDocumentViewToCachedPage(CachedPage*)
622 bool FrameLoaderClientQt::canCachePage() const
624 // don't do any caching for now
628 void FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError& error)
631 loader->frameLoader()->setEncoding(m_response.textEncodingName(), false);
636 void FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
640 FrameLoader *fl = loader->frameLoader();
642 fl->setEncoding(m_response.textEncodingName(), false);
645 fl->addData(data, length);
648 WebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest& request)
650 return ResourceError("Error", -999, request.url().prettyURL(), QObject::tr("QWebFrame", "Request cancelled"));
653 // copied from WebKit/Misc/WebKitErrors[Private].h
655 WebKitErrorCannotShowMIMEType = 100,
656 WebKitErrorCannotShowURL = 101,
657 WebKitErrorFrameLoadInterruptedByPolicyChange = 102,
658 WebKitErrorCannotUseRestrictedPort = 103,
659 WebKitErrorCannotFindPlugIn = 200,
660 WebKitErrorCannotLoadPlugIn = 201,
661 WebKitErrorJavaUnavailable = 202,
664 WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
666 return ResourceError("Error", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(), QObject::tr("QWebFrame", "Request blocked"));
670 WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
672 return ResourceError("Error", WebKitErrorCannotShowURL, request.url().url(), QObject::tr("QWebFrame", "Cannot show URL"));
675 WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
677 return ResourceError("Error", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().url(), QObject::tr("QWebFrame", "Frame load interruped by policy change"));
680 WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
682 return ResourceError("Error", WebKitErrorCannotShowMIMEType, response.url().url(), QObject::tr("QWebFrame", "Cannot show mimetype"));
685 WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse& response)
687 return ResourceError("Error", -998 /* ### */, response.url().url(), QObject::tr("QWebFrame", "File does not exist"));
690 bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
696 WTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData)
698 RefPtr<DocumentLoader> loader = new DocumentLoader(request, substituteData);
699 return loader.release();
702 void FrameLoaderClientQt::download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
707 void FrameLoaderClientQt::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&)
712 void FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response)
714 // seems like the Mac code doesn't do anything here by default neither
715 //qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << request.url().url();
718 void FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
723 void FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
728 void FrameLoaderClientQt::dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceResponse& response)
731 m_response = response;
733 //qDebug() << " got response from" << response.url().url();
736 void FrameLoaderClientQt::dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long, int)
740 void FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader* loader, unsigned long)
744 void FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long, const WebCore::ResourceError&)
747 FrameLoader *fl = loader->frameLoader();
748 fl->setEncoding(m_response.textEncodingName(), false);
753 bool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
759 void FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::ResourceError&)
762 emit m_webFrame->loadDone(false);
765 void FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError&)
768 emit m_webFrame->loadDone(false);
771 WebCore::Frame* FrameLoaderClientQt::dispatchCreatePage()
775 QWebPage *newPage = m_webFrame->page()->createWindow();
776 return newPage->mainFrame()->d->frame.get();
779 void FrameLoaderClientQt::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const WebCore::String&, const WebCore::ResourceRequest&)
781 // we need to call directly here
782 Q_ASSERT(!m_policyFunction);
783 m_policyFunction = function;
784 slotCallPolicyFunction(PolicyUse);
787 void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String&)
789 Q_ASSERT(!m_policyFunction);
790 m_policyFunction = function;
791 slotCallPolicyFunction(PolicyUse);
794 void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request)
796 Q_ASSERT(!m_policyFunction);
797 m_policyFunction = function;
799 QWebNetworkRequest r(request);
800 QWebPage *page = m_webFrame->page();
802 if (page->d->navigationRequested(m_webFrame, r, QWebPage::NavigationType(action.type())) ==
803 QWebPage::IgnoreNavigationRequest) {
804 slotCallPolicyFunction(PolicyIgnore);
808 slotCallPolicyFunction(PolicyUse);
812 void FrameLoaderClientQt::dispatchUnableToImplementPolicy(const WebCore::ResourceError&)
817 void FrameLoaderClientQt::startDownload(const WebCore::ResourceRequest&)
822 bool FrameLoaderClientQt::willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL&) const
828 PassRefPtr<Frame> FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
829 const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
831 QWebFrameData frameData;
833 frameData.name = name;
834 frameData.ownerElement = ownerElement;
835 frameData.referrer = referrer;
836 frameData.allowsScrolling = allowsScrolling;
837 frameData.marginWidth = marginWidth;
838 frameData.marginHeight = marginHeight;
840 QWebFrame* webFrame = new QWebFrame(m_webFrame, &frameData);
841 emit m_webFrame->page()->frameCreated(webFrame);
843 RefPtr<Frame> childFrame = webFrame->d->frame;
845 // FIXME: All of the below should probably be moved over into WebCore
846 childFrame->tree()->setName(name);
847 m_frame->tree()->appendChild(childFrame);
848 // ### set override encoding if we have one
850 FrameLoadType loadType = m_frame->loader()->loadType();
851 FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedHistory;
853 childFrame->loader()->load(frameData.url, frameData.referrer, childLoadType,
856 // The frame's onload handler may have removed it from the document.
857 if (!childFrame->tree()->parent())
860 return childFrame.release();
863 ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const String& _mimeType)
865 // qDebug()<<" ++++++++++++++++ url is "<<url.prettyURL()<<", mime = "<<_mimeType;
866 if (_mimeType == "application/x-qt-plugin" || _mimeType == "application/x-qt-styled-widget")
867 return ObjectContentOtherPlugin;
870 return ObjectContentNone;
872 String mimeType = _mimeType;
873 if (!mimeType.length()) {
874 QFileInfo fi(url.path());
875 mimeType = MIMETypeRegistry::getMIMETypeForExtension(fi.suffix());
878 if (!mimeType.length())
879 return ObjectContentFrame;
881 if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
882 return ObjectContentImage;
884 if (QWebFactoryLoader::self()->supportsMimeType(mimeType))
885 return ObjectContentNetscapePlugin;
887 if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
888 return ObjectContentFrame;
890 if (url.protocol() == "about")
891 return ObjectContentFrame;
893 return ObjectContentNone;
896 static const CSSPropertyID qstyleSheetProperties[] = {
898 CSS_PROP_FONT_FAMILY,
904 const unsigned numqStyleSheetProperties = sizeof(qstyleSheetProperties) / sizeof(qstyleSheetProperties[0]);
906 Widget* FrameLoaderClientQt::createPlugin(const IntSize&, Element* element, const KURL& url, const Vector<String>& paramNames,
907 const Vector<String>& paramValues, const String& mimeType, bool loadManually)
909 // qDebug()<<"------ Creating plugin in FrameLoaderClientQt::createPlugin for "<<url.prettyURL() << mimeType;
910 // qDebug()<<"------\t url = "<<url.prettyURL();
913 for (int i = 0; i < paramNames.size(); ++i)
914 params.append(paramNames[i]);
915 for (int i = 0; i < paramValues.size(); ++i)
916 values.append(paramValues[i]);
918 QString urlStr(url.url());
923 if (mimeType == "application/x-qt-plugin" || mimeType == "application/x-qt-styled-widget") {
924 object = m_webFrame->page()->createPlugin(element->getAttribute("classid"), qurl, params, values);
925 QWidget *widget = qobject_cast<QWidget *>(object);
926 if (widget && mimeType == "application/x-qt-styled-widget") {
927 CSSComputedStyleDeclaration cssDecl(element);
929 QString styleSheet = element->getAttribute("style");
930 if (!styleSheet.isEmpty())
931 styleSheet += QLatin1Char(';');
933 for (int i = 0; i < numqStyleSheetProperties; ++i) {
934 CSSPropertyID property = qstyleSheetProperties[i];
936 styleSheet += ::getPropertyName(property);
937 styleSheet += QLatin1Char(':');
938 styleSheet += cssDecl.getPropertyValue(property);
939 styleSheet += QLatin1Char(';');
942 widget->setStyleSheet(styleSheet);
947 object = QWebFactoryLoader::self()->create(m_webFrame, qurl, mimeType, params, values);
950 QWidget *widget = qobject_cast<QWidget *>(object);
952 widget->setParent(m_webFrame->page());
953 Widget* w= new Widget();
954 w->setQWidget(widget);
957 // FIXME: make things work for widgetless plugins as well
964 void FrameLoaderClientQt::redirectDataToPlugin(Widget* pluginWidget)
970 Widget* FrameLoaderClientQt::createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL,
971 const Vector<String>& paramNames, const Vector<String>& paramValues)
977 String FrameLoaderClientQt::overrideMediaType() const
983 QString FrameLoaderClientQt::chooseFile(const QString& oldFile)
985 return webFrame()->page()->chooseFile(webFrame(), oldFile);
990 #include "moc_FrameLoaderClientQt.cpp"