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 "PluginData.h"
41 #include "ProgressTracker.h"
42 #include "ResourceRequest.h"
43 #include "HistoryItem.h"
44 #include "HTMLFormElement.h"
45 #include "NotImplemented.h"
46 #include "QNetworkReplyHandler.h"
47 #include "ResourceHandleInternal.h"
48 #include "ResourceHandle.h"
51 #include "qwebframe.h"
52 #include "qwebframe_p.h"
53 #include "qwebhistoryinterface.h"
54 #include "qwebpluginfactory.h"
56 #include <qfileinfo.h>
58 #include <QCoreApplication>
60 #if QT_VERSION >= 0x040400
61 #include <QNetworkRequest>
62 #include <QNetworkReply>
64 #include "qwebnetworkinterface_p.h"
70 FrameLoaderClientQt::FrameLoaderClientQt()
76 connect(this, SIGNAL(sigCallPolicyFunction(int)), this, SLOT(slotCallPolicyFunction(int)), Qt::QueuedConnection);
80 FrameLoaderClientQt::~FrameLoaderClientQt()
84 void FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame)
86 m_webFrame = webFrame;
88 if (!m_webFrame || !m_webFrame->page()) {
89 qWarning("FrameLoaderClientQt::setFrame frame without Page!");
93 connect(this, SIGNAL(loadStarted()),
94 m_webFrame, SIGNAL(loadStarted()));
95 connect(this, SIGNAL(loadProgressChanged(int)),
96 m_webFrame->page(), SIGNAL(loadProgressChanged(int)));
97 connect(this, SIGNAL(loadFinished()),
98 m_webFrame, SIGNAL(loadFinished()));
99 connect(this, SIGNAL(titleChanged(const QString&)),
100 m_webFrame, SIGNAL(titleChanged(const QString&)));
103 QWebFrame* FrameLoaderClientQt::webFrame() const
108 void FrameLoaderClientQt::callPolicyFunction(FramePolicyFunction function, PolicyAction action)
110 ASSERT(!m_policyFunction);
113 m_policyFunction = function;
114 emit sigCallPolicyFunction(action);
117 void FrameLoaderClientQt::slotCallPolicyFunction(int action)
119 if (!m_frame || !m_policyFunction)
121 FramePolicyFunction function = m_policyFunction;
122 m_policyFunction = 0;
123 (m_frame->loader()->*function)(WebCore::PolicyAction(action));
126 bool FrameLoaderClientQt::hasWebView() const
133 bool FrameLoaderClientQt::hasFrameView() const
140 bool FrameLoaderClientQt::hasBackForwardList() const
147 void FrameLoaderClientQt::resetBackForwardList()
153 bool FrameLoaderClientQt::provisionalItemIsTarget() const
160 bool FrameLoaderClientQt::loadProvisionalItemFromPageCache()
167 void FrameLoaderClientQt::invalidateCurrentItemPageCache()
172 void FrameLoaderClientQt::savePlatformDataToCachedPage(CachedPage*)
177 void FrameLoaderClientQt::transitionToCommittedFromCachedPage(CachedPage*)
182 void FrameLoaderClientQt::transitionToCommittedForNewPage()
184 // qDebug() << "FrameLoaderClientQt::makeDocumentView" << m_frame->document();
186 // if (!m_frame->document())
187 // m_frame->loader()->createEmptyDocument();
191 void FrameLoaderClientQt::makeRepresentation(DocumentLoader*)
193 // don't need this for now I think.
197 void FrameLoaderClientQt::forceLayout()
199 m_frame->view()->setNeedsLayout();
200 m_frame->view()->layout();
204 void FrameLoaderClientQt::forceLayoutForNonHTML()
209 void FrameLoaderClientQt::setCopiesOnScroll()
211 // apparently mac specific
215 LoadErrorResetToken* FrameLoaderClientQt::tokenForLoadErrorReset()
222 void FrameLoaderClientQt::resetAfterLoadError(LoadErrorResetToken*)
228 void FrameLoaderClientQt::doNotResetAfterLoadError(LoadErrorResetToken*)
234 void FrameLoaderClientQt::willCloseDocument()
239 void FrameLoaderClientQt::detachedFromParent2()
244 void FrameLoaderClientQt::detachedFromParent3()
249 void FrameLoaderClientQt::detachedFromParent4()
253 m_webFrame->d->frame = 0;
254 m_webFrame->d->frameView = 0;
260 void FrameLoaderClientQt::loadedFromCachedPage()
266 void FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
268 // don't need this one
272 void FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad()
278 void FrameLoaderClientQt::dispatchDidCancelClientRedirect()
284 void FrameLoaderClientQt::dispatchWillPerformClientRedirect(const KURL&,
292 void FrameLoaderClientQt::dispatchDidChangeLocationWithinPage()
298 void FrameLoaderClientQt::dispatchWillClose()
303 void FrameLoaderClientQt::dispatchDidStartProvisionalLoad()
306 emit m_webFrame->provisionalLoad();
310 void FrameLoaderClientQt::dispatchDidReceiveTitle(const String& title)
313 emit m_webFrame->urlChanged(m_webFrame->url());
314 emit titleChanged(title);
318 void FrameLoaderClientQt::dispatchDidCommitLoad()
320 if (m_frame->tree()->parent())
322 m_webFrame->page()->d->updateNavigationActions();
326 void FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
328 if (m_frame->tree()->parent())
330 m_webFrame->page()->d->updateNavigationActions();
334 void FrameLoaderClientQt::dispatchDidFinishLoad()
337 emit m_webFrame->loadDone(true);
338 if (m_frame->tree()->parent())
340 m_webFrame->page()->d->updateNavigationActions();
344 void FrameLoaderClientQt::dispatchDidFirstLayout()
347 emit m_webFrame->initialLayoutComplete();
351 void FrameLoaderClientQt::dispatchShow()
357 void FrameLoaderClientQt::cancelPolicyCheck()
359 // qDebug() << "FrameLoaderClientQt::cancelPolicyCheck";
360 m_policyFunction = 0;
364 void FrameLoaderClientQt::dispatchWillSubmitForm(FramePolicyFunction function,
365 PassRefPtr<FormState>)
368 Q_ASSERT(!m_policyFunction);
369 // FIXME: This is surely too simple
370 callPolicyFunction(function, PolicyUse);
374 void FrameLoaderClientQt::dispatchDidLoadMainResource(DocumentLoader*)
379 void FrameLoaderClientQt::clearLoadingFromPageCache(DocumentLoader*)
385 bool FrameLoaderClientQt::isLoadingFromPageCache(DocumentLoader*)
392 void FrameLoaderClientQt::revertToProvisionalState(DocumentLoader*)
398 void FrameLoaderClientQt::clearUnarchivingState(DocumentLoader*)
404 void FrameLoaderClientQt::postProgressStartedNotification()
406 if (m_webFrame && m_frame->page())
408 if (m_frame->tree()->parent())
410 m_webFrame->page()->d->updateNavigationActions();
413 void FrameLoaderClientQt::postProgressEstimateChangedNotification()
415 if (m_webFrame && m_frame->page())
416 emit loadProgressChanged(qRound(m_frame->page()->progress()->estimatedProgress() * 100));
419 void FrameLoaderClientQt::postProgressFinishedNotification()
421 if (m_webFrame && m_frame->page())
425 void FrameLoaderClientQt::setMainFrameDocumentReady(bool b)
427 // this is only interesting once we provide an external API for the DOM
431 void FrameLoaderClientQt::willChangeTitle(DocumentLoader*)
433 // no need for, dispatchDidReceiveTitle is the right callback
437 void FrameLoaderClientQt::didChangeTitle(DocumentLoader *)
439 // no need for, dispatchDidReceiveTitle is the right callback
443 void FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
446 FrameLoader *fl = loader->frameLoader();
447 fl->setEncoding(m_response.textEncodingName(), false);
453 void FrameLoaderClientQt::finalSetupForReplace(DocumentLoader*)
459 void FrameLoaderClientQt::setDefersLoading(bool)
465 bool FrameLoaderClientQt::isArchiveLoadPending(ResourceLoader*) const
471 void FrameLoaderClientQt::cancelPendingArchiveLoad(ResourceLoader*)
477 void FrameLoaderClientQt::clearArchivedResources()
479 // don't think we need to do anything here currently
483 bool FrameLoaderClientQt::canShowMIMEType(const String& MIMEType) const
485 if (MIMETypeRegistry::isSupportedImageMIMEType(MIMEType))
488 if (MIMETypeRegistry::isSupportedNonImageMIMEType(MIMEType))
494 bool FrameLoaderClientQt::representationExistsForURLScheme(const String& URLScheme) const
500 String FrameLoaderClientQt::generatedMIMETypeForURLScheme(const String& URLScheme) const
507 void FrameLoaderClientQt::frameLoadCompleted()
509 // Note: Can be called multiple times.
510 // Even if already complete, we might have set a previous item on a frame that
511 // didn't do any data loading on the past transaction. Make sure to clear these out.
512 m_frame->loader()->setPreviousHistoryItem(0);
516 void FrameLoaderClientQt::restoreViewState()
522 void FrameLoaderClientQt::provisionalLoadStarted()
524 // don't need to do anything here
528 bool FrameLoaderClientQt::shouldTreatURLAsSameAsCurrent(const KURL&) const
535 void FrameLoaderClientQt::addHistoryItemForFragmentScroll()
541 void FrameLoaderClientQt::didFinishLoad()
547 void FrameLoaderClientQt::prepareForDataSourceReplacement()
549 m_frame->loader()->detachChildren();
552 void FrameLoaderClientQt::setTitle(const String&, const KURL&)
554 // no need for, dispatchDidReceiveTitle is the right callback
558 String FrameLoaderClientQt::userAgent(const KURL& url)
561 return m_webFrame->page()->userAgentFor(QUrl((QString)url.string()));
566 void FrameLoaderClientQt::dispatchDidReceiveIcon()
569 emit m_webFrame->iconLoaded();
573 void FrameLoaderClientQt::frameLoaderDestroyed()
575 Q_ASSERT(m_webFrame == 0);
576 Q_ASSERT(m_frame == 0);
580 bool FrameLoaderClientQt::canHandleRequest(const WebCore::ResourceRequest&) const
585 void FrameLoaderClientQt::windowObjectCleared()
588 emit m_webFrame->cleared();
591 void FrameLoaderClientQt::didPerformFirstNavigation() const
593 if (m_frame->tree()->parent())
595 m_webFrame->page()->d->updateNavigationActions();
598 void FrameLoaderClientQt::registerForIconNotification(bool)
603 void FrameLoaderClientQt::updateGlobalHistory(const WebCore::KURL& url)
605 QWebHistoryInterface *history = QWebHistoryInterface::defaultInterface();
607 history->addHistoryEntry(url.prettyURL());
610 bool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem *item) const
618 void FrameLoaderClientQt::saveViewStateToItem(WebCore::HistoryItem*)
623 bool FrameLoaderClientQt::canCachePage() const
625 // don't do any caching for now
629 void FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError& error)
632 loader->frameLoader()->setEncoding(m_response.textEncodingName(), false);
637 void FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
641 FrameLoader *fl = loader->frameLoader();
643 fl->setEncoding(m_response.textEncodingName(), false);
646 fl->addData(data, length);
649 WebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest& request)
651 return ResourceError("Error", -999, request.url().prettyURL(),
652 QCoreApplication::translate("QWebFrame", "Request cancelled", 0, QCoreApplication::UnicodeUTF8));
655 // copied from WebKit/Misc/WebKitErrors[Private].h
657 WebKitErrorCannotShowMIMEType = 100,
658 WebKitErrorCannotShowURL = 101,
659 WebKitErrorFrameLoadInterruptedByPolicyChange = 102,
660 WebKitErrorCannotUseRestrictedPort = 103,
661 WebKitErrorCannotFindPlugIn = 200,
662 WebKitErrorCannotLoadPlugIn = 201,
663 WebKitErrorJavaUnavailable = 202,
666 WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
668 return ResourceError("Error", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
669 QCoreApplication::translate("QWebFrame", "Request blocked", 0, QCoreApplication::UnicodeUTF8));
673 WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
675 return ResourceError("Error", WebKitErrorCannotShowURL, request.url().string(),
676 QCoreApplication::translate("QWebFrame", "Cannot show URL", 0, QCoreApplication::UnicodeUTF8));
679 WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
681 return ResourceError("Error", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(),
682 QCoreApplication::translate("QWebFrame", "Frame load interruped by policy change", 0, QCoreApplication::UnicodeUTF8));
685 WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
687 return ResourceError("Error", WebKitErrorCannotShowMIMEType, response.url().string(),
688 QCoreApplication::translate("QWebFrame", "Cannot show mimetype", 0, QCoreApplication::UnicodeUTF8));
691 WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse& response)
693 return ResourceError("Error", -998 /* ### */, response.url().string(),
694 QCoreApplication::translate("QWebFrame", "File does not exist", 0, QCoreApplication::UnicodeUTF8));
697 bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
703 WTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData)
705 RefPtr<DocumentLoader> loader = new DocumentLoader(request, substituteData);
706 return loader.release();
709 void FrameLoaderClientQt::download(WebCore::ResourceHandle* handle, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
711 #if QT_VERSION >= 0x040400
712 QNetworkReplyHandler* handler = handle->getInternal()->m_job;
713 QNetworkReply* reply = handler->release();
715 QWebPage *page = m_webFrame->page();
716 if (page->receivers(SIGNAL(handleUnsupportedContent(QNetworkReply *))))
717 emit m_webFrame->page()->handleUnsupportedContent(reply);
724 void FrameLoaderClientQt::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&)
728 void FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response)
730 // seems like the Mac code doesn't do anything here by default neither
731 //qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << request.url().string`();
734 void FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
739 void FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
744 void FrameLoaderClientQt::dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceResponse& response)
747 m_response = response;
749 //qDebug() << " got response from" << response.url().string();
752 void FrameLoaderClientQt::dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long, int)
756 void FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader* loader, unsigned long)
760 void FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long, const WebCore::ResourceError&)
763 FrameLoader *fl = loader->frameLoader();
764 fl->setEncoding(m_response.textEncodingName(), false);
769 bool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
775 void FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::ResourceError&)
778 emit m_webFrame->loadDone(false);
781 void FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError&)
784 emit m_webFrame->loadDone(false);
787 WebCore::Frame* FrameLoaderClientQt::dispatchCreatePage()
791 QWebPage *newPage = m_webFrame->page()->createWindow();
794 return newPage->mainFrame()->d->frame.get();
797 void FrameLoaderClientQt::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const WebCore::String& MIMEType, const WebCore::ResourceRequest&)
799 // we need to call directly here
800 Q_ASSERT(!m_policyFunction);
801 m_policyFunction = function;
802 if (canShowMIMEType(MIMEType))
803 slotCallPolicyFunction(PolicyUse);
805 slotCallPolicyFunction(PolicyDownload);
808 void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String&)
810 Q_ASSERT(!m_policyFunction);
811 m_policyFunction = function;
812 slotCallPolicyFunction(PolicyUse);
815 void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request)
817 Q_ASSERT(!m_policyFunction);
818 m_policyFunction = function;
820 #if QT_VERSION < 0x040400
821 QWebNetworkRequest r(request);
823 QNetworkRequest r(request.toNetworkRequest());
825 QWebPage *page = m_webFrame->page();
827 if (page->d->navigationRequested(m_webFrame, r, QWebPage::NavigationType(action.type())) ==
828 QWebPage::IgnoreNavigationRequest) {
829 slotCallPolicyFunction(PolicyIgnore);
833 slotCallPolicyFunction(PolicyUse);
837 void FrameLoaderClientQt::dispatchUnableToImplementPolicy(const WebCore::ResourceError&)
842 void FrameLoaderClientQt::startDownload(const WebCore::ResourceRequest& request)
844 #if QT_VERSION >= 0x040400
845 QWebPage *page = m_webFrame->page();
846 emit m_webFrame->page()->download(request.toNetworkRequest());
850 bool FrameLoaderClientQt::willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL&) const
855 PassRefPtr<Frame> FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
856 const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
858 QWebFrameData frameData;
860 frameData.name = name;
861 frameData.ownerElement = ownerElement;
862 frameData.referrer = referrer;
863 frameData.allowsScrolling = allowsScrolling;
864 frameData.marginWidth = marginWidth;
865 frameData.marginHeight = marginHeight;
867 QWebFrame* webFrame = new QWebFrame(m_webFrame, &frameData);
868 emit m_webFrame->page()->frameCreated(webFrame);
870 RefPtr<Frame> childFrame = adoptRef(webFrame->d->frame.get());
872 // FIXME: All of the below should probably be moved over into WebCore
873 childFrame->tree()->setName(name);
874 m_frame->tree()->appendChild(childFrame);
875 // ### set override encoding if we have one
877 FrameLoadType loadType = m_frame->loader()->loadType();
878 FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedHistory;
880 childFrame->loader()->load(frameData.url, frameData.referrer, childLoadType,
883 // The frame's onload handler may have removed it from the document.
884 if (!childFrame->tree()->parent())
887 return childFrame.release();
890 ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const String& _mimeType)
892 // qDebug()<<" ++++++++++++++++ url is "<<url.prettyURL()<<", mime = "<<_mimeType;
893 if (_mimeType == "application/x-qt-plugin" || _mimeType == "application/x-qt-styled-widget")
894 return ObjectContentOtherPlugin;
897 return ObjectContentNone;
899 String mimeType = _mimeType;
900 if (!mimeType.length()) {
901 QFileInfo fi(url.path());
902 mimeType = MIMETypeRegistry::getMIMETypeForExtension(fi.suffix());
905 if (!mimeType.length())
906 return ObjectContentFrame;
908 if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
909 return ObjectContentImage;
911 if (m_frame->page() && m_frame->page()->pluginData()->supportsMimeType(mimeType))
912 return ObjectContentOtherPlugin;
914 if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
915 return ObjectContentFrame;
917 if (url.protocol() == "about")
918 return ObjectContentFrame;
920 return ObjectContentNone;
923 static const CSSPropertyID qstyleSheetProperties[] = {
925 CSSPropertyFontFamily,
927 CSSPropertyFontStyle,
928 CSSPropertyFontWeight
931 const unsigned numqStyleSheetProperties = sizeof(qstyleSheetProperties) / sizeof(qstyleSheetProperties[0]);
933 Widget* FrameLoaderClientQt::createPlugin(const IntSize&, Element* element, const KURL& url, const Vector<String>& paramNames,
934 const Vector<String>& paramValues, const String& mimeType, bool loadManually)
936 // qDebug()<<"------ Creating plugin in FrameLoaderClientQt::createPlugin for "<<url.prettyURL() << mimeType;
937 // qDebug()<<"------\t url = "<<url.prettyURL();
940 for (int i = 0; i < paramNames.size(); ++i)
941 params.append(paramNames[i]);
942 for (int i = 0; i < paramValues.size(); ++i)
943 values.append(paramValues[i]);
945 QString urlStr(url.string());
950 if (mimeType == "application/x-qt-plugin" || mimeType == "application/x-qt-styled-widget") {
951 object = m_webFrame->page()->createPlugin(element->getAttribute("classid"), qurl, params, values);
952 QWidget *widget = qobject_cast<QWidget *>(object);
953 if (widget && mimeType == "application/x-qt-styled-widget") {
954 CSSComputedStyleDeclaration cssDecl(element);
956 QString styleSheet = element->getAttribute("style");
957 if (!styleSheet.isEmpty())
958 styleSheet += QLatin1Char(';');
960 for (int i = 0; i < numqStyleSheetProperties; ++i) {
961 CSSPropertyID property = qstyleSheetProperties[i];
963 styleSheet += ::getPropertyName(property);
964 styleSheet += QLatin1Char(':');
965 styleSheet += cssDecl.getPropertyValue(property);
966 styleSheet += QLatin1Char(';');
969 widget->setStyleSheet(styleSheet);
973 #if QT_VERSION >= 0x040400
975 QWebPluginFactory* factory = m_webFrame->page()->pluginFactory();
977 object = factory->create(mimeType, qurl, params, values);
982 QWidget *widget = qobject_cast<QWidget *>(object);
983 QWidget *view = m_webFrame->page()->view();
984 if (widget && view) {
985 widget->setParent(view);
986 Widget* w= new Widget();
987 w->setNativeWidget(widget);
990 // FIXME: make things work for widgetless plugins as well
997 void FrameLoaderClientQt::redirectDataToPlugin(Widget* pluginWidget)
1003 Widget* FrameLoaderClientQt::createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL,
1004 const Vector<String>& paramNames, const Vector<String>& paramValues)
1010 String FrameLoaderClientQt::overrideMediaType() const
1015 QString FrameLoaderClientQt::chooseFile(const QString& oldFile)
1017 return webFrame()->page()->chooseFile(webFrame(), oldFile);
1023 #include "moc_FrameLoaderClientQt.cpp"