2 * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 * Copyright (C) 2007-2008 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 "RenderPart.h"
43 #include "ResourceRequest.h"
44 #include "HistoryItem.h"
45 #include "HTMLFormElement.h"
46 #include "NotImplemented.h"
47 #include "QNetworkReplyHandler.h"
48 #include "ResourceHandleInternal.h"
49 #include "ResourceHandle.h"
52 #include "qwebframe.h"
53 #include "qwebframe_p.h"
54 #include "qwebhistoryinterface.h"
55 #include "qwebpluginfactory.h"
57 #include <qfileinfo.h>
59 #include <QCoreApplication>
61 #if QT_VERSION >= 0x040400
62 #include <QNetworkRequest>
63 #include <QNetworkReply>
65 #include "qwebnetworkinterface_p.h"
71 FrameLoaderClientQt::FrameLoaderClientQt()
77 connect(this, SIGNAL(sigCallPolicyFunction(int)), this, SLOT(slotCallPolicyFunction(int)), Qt::QueuedConnection);
81 FrameLoaderClientQt::~FrameLoaderClientQt()
85 void FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame)
87 m_webFrame = webFrame;
89 if (!m_webFrame || !m_webFrame->page()) {
90 qWarning("FrameLoaderClientQt::setFrame frame without Page!");
94 connect(this, SIGNAL(loadStarted()),
95 m_webFrame, SIGNAL(loadStarted()));
96 connect(this, SIGNAL(loadProgressChanged(int)),
97 m_webFrame->page(), SIGNAL(loadProgressChanged(int)));
98 connect(this, SIGNAL(loadFinished()),
99 m_webFrame, SIGNAL(loadFinished()));
100 connect(this, SIGNAL(titleChanged(const QString&)),
101 m_webFrame, SIGNAL(titleChanged(const QString&)));
104 QWebFrame* FrameLoaderClientQt::webFrame() const
109 void FrameLoaderClientQt::callPolicyFunction(FramePolicyFunction function, PolicyAction action)
111 ASSERT(!m_policyFunction);
114 m_policyFunction = function;
115 emit sigCallPolicyFunction(action);
118 void FrameLoaderClientQt::slotCallPolicyFunction(int action)
120 if (!m_frame || !m_policyFunction)
122 FramePolicyFunction function = m_policyFunction;
123 m_policyFunction = 0;
124 (m_frame->loader()->*function)(WebCore::PolicyAction(action));
127 bool FrameLoaderClientQt::hasWebView() const
134 bool FrameLoaderClientQt::hasFrameView() const
140 void FrameLoaderClientQt::savePlatformDataToCachedPage(CachedPage*)
145 void FrameLoaderClientQt::transitionToCommittedFromCachedPage(CachedPage*)
149 void FrameLoaderClientQt::transitionToCommittedForNewPage()
154 Page* page = m_frame->page();
157 bool isMainFrame = m_frame == page->mainFrame();
161 FrameView* frameView;
163 frameView = new FrameView(m_frame, m_webFrame->page()->viewportSize());
165 frameView = new FrameView(m_frame);
167 if (!m_webFrame->d->allowsScrolling)
168 frameView->setScrollbarsMode(ScrollbarAlwaysOff);
169 if (m_webFrame->d->marginWidth != -1)
170 frameView->setMarginWidth(m_webFrame->d->marginWidth);
171 if (m_webFrame->d->marginHeight != -1)
172 frameView->setMarginHeight(m_webFrame->d->marginHeight);
173 if (m_webFrame->d->horizontalScrollBarPolicy != Qt::ScrollBarAsNeeded)
174 frameView->setHScrollbarMode((ScrollbarMode)m_webFrame->d->horizontalScrollBarPolicy);
175 if (m_webFrame->d->verticalScrollBarPolicy != Qt::ScrollBarAsNeeded)
176 frameView->setVScrollbarMode((ScrollbarMode)m_webFrame->d->verticalScrollBarPolicy);
178 m_frame->setView(frameView);
179 // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame.
182 if (m_frame->ownerRenderer())
183 m_frame->ownerRenderer()->setWidget(frameView);
187 void FrameLoaderClientQt::makeRepresentation(DocumentLoader*)
189 // don't need this for now I think.
193 void FrameLoaderClientQt::forceLayout()
195 m_frame->forceLayout(true);
199 void FrameLoaderClientQt::forceLayoutForNonHTML()
204 void FrameLoaderClientQt::setCopiesOnScroll()
206 // apparently mac specific
210 void FrameLoaderClientQt::detachedFromParent2()
215 void FrameLoaderClientQt::detachedFromParent3()
220 void FrameLoaderClientQt::detachedFromParent4()
224 void FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
226 // don't need this one
230 void FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad()
236 void FrameLoaderClientQt::dispatchDidCancelClientRedirect()
242 void FrameLoaderClientQt::dispatchWillPerformClientRedirect(const KURL&,
250 void FrameLoaderClientQt::dispatchDidChangeLocationWithinPage()
256 void FrameLoaderClientQt::dispatchWillClose()
261 void FrameLoaderClientQt::dispatchDidStartProvisionalLoad()
264 emit m_webFrame->provisionalLoad();
268 void FrameLoaderClientQt::dispatchDidReceiveTitle(const String& title)
274 emit m_webFrame->urlChanged(m_webFrame->url());
275 emit titleChanged(title);
279 void FrameLoaderClientQt::dispatchDidCommitLoad()
281 if (m_frame->tree()->parent() || !m_webFrame)
283 m_webFrame->page()->d->updateNavigationActions();
287 void FrameLoaderClientQt::dispatchDidFinishDocumentLoad()
289 if (m_frame->tree()->parent() || !m_webFrame)
291 m_webFrame->page()->d->updateNavigationActions();
295 void FrameLoaderClientQt::dispatchDidFinishLoad()
298 emit m_webFrame->loadDone(true);
299 if (m_frame->tree()->parent() || !m_webFrame)
301 m_webFrame->page()->d->updateNavigationActions();
305 void FrameLoaderClientQt::dispatchDidFirstLayout()
308 emit m_webFrame->initialLayoutComplete();
312 void FrameLoaderClientQt::dispatchShow()
318 void FrameLoaderClientQt::cancelPolicyCheck()
320 // qDebug() << "FrameLoaderClientQt::cancelPolicyCheck";
321 m_policyFunction = 0;
325 void FrameLoaderClientQt::dispatchWillSubmitForm(FramePolicyFunction function,
326 PassRefPtr<FormState>)
329 Q_ASSERT(!m_policyFunction);
330 // FIXME: This is surely too simple
331 callPolicyFunction(function, PolicyUse);
335 void FrameLoaderClientQt::dispatchDidLoadMainResource(DocumentLoader*)
340 void FrameLoaderClientQt::revertToProvisionalState(DocumentLoader*)
346 void FrameLoaderClientQt::postProgressStartedNotification()
348 if (m_webFrame && m_frame->page())
350 if (m_frame->tree()->parent() || !m_webFrame)
352 m_webFrame->page()->d->updateNavigationActions();
355 void FrameLoaderClientQt::postProgressEstimateChangedNotification()
357 if (m_webFrame && m_frame->page())
358 emit loadProgressChanged(qRound(m_frame->page()->progress()->estimatedProgress() * 100));
361 void FrameLoaderClientQt::postProgressFinishedNotification()
363 if (m_webFrame && m_frame->page())
367 void FrameLoaderClientQt::setMainFrameDocumentReady(bool b)
369 // this is only interesting once we provide an external API for the DOM
373 void FrameLoaderClientQt::willChangeTitle(DocumentLoader*)
375 // no need for, dispatchDidReceiveTitle is the right callback
379 void FrameLoaderClientQt::didChangeTitle(DocumentLoader *)
381 // no need for, dispatchDidReceiveTitle is the right callback
385 void FrameLoaderClientQt::finishedLoading(DocumentLoader* loader)
388 FrameLoader *fl = loader->frameLoader();
389 fl->setEncoding(m_response.textEncodingName(), false);
395 bool FrameLoaderClientQt::canShowMIMEType(const String& MIMEType) const
397 if (MIMETypeRegistry::isSupportedImageMIMEType(MIMEType))
400 if (MIMETypeRegistry::isSupportedNonImageMIMEType(MIMEType))
406 bool FrameLoaderClientQt::representationExistsForURLScheme(const String& URLScheme) const
412 String FrameLoaderClientQt::generatedMIMETypeForURLScheme(const String& URLScheme) const
419 void FrameLoaderClientQt::frameLoadCompleted()
421 // Note: Can be called multiple times.
422 // Even if already complete, we might have set a previous item on a frame that
423 // didn't do any data loading on the past transaction. Make sure to clear these out.
424 m_frame->loader()->setPreviousHistoryItem(0);
428 void FrameLoaderClientQt::restoreViewState()
434 void FrameLoaderClientQt::provisionalLoadStarted()
436 // don't need to do anything here
440 void FrameLoaderClientQt::didFinishLoad()
446 void FrameLoaderClientQt::prepareForDataSourceReplacement()
448 m_frame->loader()->detachChildren();
451 void FrameLoaderClientQt::setTitle(const String&, const KURL&)
453 // no need for, dispatchDidReceiveTitle is the right callback
457 String FrameLoaderClientQt::userAgent(const KURL& url)
460 return m_webFrame->page()->userAgentFor(QUrl((QString)url.string()));
465 void FrameLoaderClientQt::dispatchDidReceiveIcon()
468 emit m_webFrame->iconLoaded();
472 void FrameLoaderClientQt::frameLoaderDestroyed()
481 bool FrameLoaderClientQt::canHandleRequest(const WebCore::ResourceRequest&) const
486 void FrameLoaderClientQt::windowObjectCleared()
489 emit m_webFrame->cleared();
492 void FrameLoaderClientQt::didPerformFirstNavigation() const
494 if (m_frame->tree()->parent() || !m_webFrame)
496 m_webFrame->page()->d->updateNavigationActions();
499 void FrameLoaderClientQt::registerForIconNotification(bool)
504 void FrameLoaderClientQt::updateGlobalHistory(const WebCore::KURL& url)
506 QWebHistoryInterface *history = QWebHistoryInterface::defaultInterface();
508 history->addHistoryEntry(url.prettyURL());
511 bool FrameLoaderClientQt::shouldGoToHistoryItem(WebCore::HistoryItem *item) const
516 void FrameLoaderClientQt::saveViewStateToItem(WebCore::HistoryItem*)
520 bool FrameLoaderClientQt::canCachePage() const
525 void FrameLoaderClientQt::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError& error)
528 loader->frameLoader()->setEncoding(m_response.textEncodingName(), false);
533 void FrameLoaderClientQt::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
537 FrameLoader *fl = loader->frameLoader();
539 fl->setEncoding(m_response.textEncodingName(), false);
542 fl->addData(data, length);
545 WebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest& request)
547 return ResourceError("Error", -999, request.url().prettyURL(),
548 QCoreApplication::translate("QWebFrame", "Request cancelled", 0, QCoreApplication::UnicodeUTF8));
551 // copied from WebKit/Misc/WebKitErrors[Private].h
553 WebKitErrorCannotShowMIMEType = 100,
554 WebKitErrorCannotShowURL = 101,
555 WebKitErrorFrameLoadInterruptedByPolicyChange = 102,
556 WebKitErrorCannotUseRestrictedPort = 103,
557 WebKitErrorCannotFindPlugIn = 200,
558 WebKitErrorCannotLoadPlugIn = 201,
559 WebKitErrorJavaUnavailable = 202,
562 WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
564 return ResourceError("Error", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
565 QCoreApplication::translate("QWebFrame", "Request blocked", 0, QCoreApplication::UnicodeUTF8));
569 WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
571 return ResourceError("Error", WebKitErrorCannotShowURL, request.url().string(),
572 QCoreApplication::translate("QWebFrame", "Cannot show URL", 0, QCoreApplication::UnicodeUTF8));
575 WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
577 return ResourceError("Error", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(),
578 QCoreApplication::translate("QWebFrame", "Frame load interruped by policy change", 0, QCoreApplication::UnicodeUTF8));
581 WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
583 return ResourceError("Error", WebKitErrorCannotShowMIMEType, response.url().string(),
584 QCoreApplication::translate("QWebFrame", "Cannot show mimetype", 0, QCoreApplication::UnicodeUTF8));
587 WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse& response)
589 return ResourceError("Error", -998 /* ### */, response.url().string(),
590 QCoreApplication::translate("QWebFrame", "File does not exist", 0, QCoreApplication::UnicodeUTF8));
593 bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
599 WTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData)
601 RefPtr<DocumentLoader> loader = new DocumentLoader(request, substituteData);
602 return loader.release();
605 void FrameLoaderClientQt::download(WebCore::ResourceHandle* handle, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
607 #if QT_VERSION >= 0x040400
611 QNetworkReplyHandler* handler = handle->getInternal()->m_job;
612 QNetworkReply* reply = handler->release();
614 QWebPage *page = m_webFrame->page();
615 if (page->receivers(SIGNAL(handleUnsupportedContent(QNetworkReply *))))
616 emit m_webFrame->page()->handleUnsupportedContent(reply);
623 void FrameLoaderClientQt::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&)
627 void FrameLoaderClientQt::dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response)
629 // seems like the Mac code doesn't do anything here by default neither
630 //qDebug() << "FrameLoaderClientQt::dispatchWillSendRequest" << request.isNull() << request.url().string`();
633 void FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
638 void FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
643 void FrameLoaderClientQt::dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceResponse& response)
646 m_response = response;
648 //qDebug() << " got response from" << response.url().string();
651 void FrameLoaderClientQt::dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long, int)
655 void FrameLoaderClientQt::dispatchDidFinishLoading(WebCore::DocumentLoader* loader, unsigned long)
659 void FrameLoaderClientQt::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long, const WebCore::ResourceError&)
662 FrameLoader *fl = loader->frameLoader();
663 fl->setEncoding(m_response.textEncodingName(), false);
668 bool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
674 void FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::ResourceError&)
677 emit m_webFrame->loadDone(false);
680 void FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError&)
683 emit m_webFrame->loadDone(false);
686 WebCore::Frame* FrameLoaderClientQt::dispatchCreatePage()
690 QWebPage *newPage = m_webFrame->page()->createWindow();
693 return newPage->mainFrame()->d->frame;
696 void FrameLoaderClientQt::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const WebCore::String& MIMEType, const WebCore::ResourceRequest&)
698 // we need to call directly here
699 Q_ASSERT(!m_policyFunction);
700 m_policyFunction = function;
701 if (canShowMIMEType(MIMEType))
702 slotCallPolicyFunction(PolicyUse);
704 slotCallPolicyFunction(PolicyDownload);
707 void FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String&)
709 Q_ASSERT(!m_policyFunction);
710 m_policyFunction = function;
711 slotCallPolicyFunction(PolicyUse);
714 void FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request)
716 Q_ASSERT(!m_policyFunction);
717 m_policyFunction = function;
719 #if QT_VERSION < 0x040400
720 QWebNetworkRequest r(request);
722 QNetworkRequest r(request.toNetworkRequest());
724 QWebPage *page = m_webFrame->page();
726 if (page->d->navigationRequested(m_webFrame, r, QWebPage::NavigationType(action.type())) ==
727 QWebPage::IgnoreNavigationRequest) {
728 slotCallPolicyFunction(PolicyIgnore);
732 slotCallPolicyFunction(PolicyUse);
736 void FrameLoaderClientQt::dispatchUnableToImplementPolicy(const WebCore::ResourceError&)
741 void FrameLoaderClientQt::startDownload(const WebCore::ResourceRequest& request)
743 #if QT_VERSION >= 0x040400
747 QWebPage *page = m_webFrame->page();
748 emit m_webFrame->page()->download(request.toNetworkRequest());
752 PassRefPtr<Frame> FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
753 const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
758 QWebFrameData frameData;
760 frameData.name = name;
761 frameData.ownerElement = ownerElement;
762 frameData.referrer = referrer;
763 frameData.allowsScrolling = allowsScrolling;
764 frameData.marginWidth = marginWidth;
765 frameData.marginHeight = marginHeight;
767 QWebFrame* webFrame = new QWebFrame(m_webFrame, &frameData);
768 emit m_webFrame->page()->frameCreated(webFrame);
770 RefPtr<Frame> childFrame = adoptRef(webFrame->d->frame);
772 // FIXME: All of the below should probably be moved over into WebCore
773 childFrame->tree()->setName(name);
774 m_frame->tree()->appendChild(childFrame);
775 // ### set override encoding if we have one
777 FrameLoadType loadType = m_frame->loader()->loadType();
778 FrameLoadType childLoadType = FrameLoadTypeRedirectWithLockedHistory;
780 childFrame->loader()->load(frameData.url, frameData.referrer, childLoadType,
783 // The frame's onload handler may have removed it from the document.
784 if (!childFrame->tree()->parent())
787 return childFrame.release();
790 ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const String& _mimeType)
792 // qDebug()<<" ++++++++++++++++ url is "<<url.prettyURL()<<", mime = "<<_mimeType;
793 if (_mimeType == "application/x-qt-plugin" || _mimeType == "application/x-qt-styled-widget")
794 return ObjectContentOtherPlugin;
797 return ObjectContentNone;
799 String mimeType = _mimeType;
800 if (!mimeType.length()) {
801 QFileInfo fi(url.path());
802 mimeType = MIMETypeRegistry::getMIMETypeForExtension(fi.suffix());
805 if (!mimeType.length())
806 return ObjectContentFrame;
808 if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
809 return ObjectContentImage;
811 if (m_frame->page() && m_frame->page()->pluginData()->supportsMimeType(mimeType))
812 return ObjectContentOtherPlugin;
814 if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
815 return ObjectContentFrame;
817 if (url.protocol() == "about")
818 return ObjectContentFrame;
820 return ObjectContentNone;
823 static const CSSPropertyID qstyleSheetProperties[] = {
825 CSSPropertyFontFamily,
827 CSSPropertyFontStyle,
828 CSSPropertyFontWeight
831 const unsigned numqStyleSheetProperties = sizeof(qstyleSheetProperties) / sizeof(qstyleSheetProperties[0]);
833 Widget* FrameLoaderClientQt::createPlugin(const IntSize&, Element* element, const KURL& url, const Vector<String>& paramNames,
834 const Vector<String>& paramValues, const String& mimeType, bool loadManually)
836 // qDebug()<<"------ Creating plugin in FrameLoaderClientQt::createPlugin for "<<url.prettyURL() << mimeType;
837 // qDebug()<<"------\t url = "<<url.prettyURL();
844 for (int i = 0; i < paramNames.size(); ++i)
845 params.append(paramNames[i]);
846 for (int i = 0; i < paramValues.size(); ++i)
847 values.append(paramValues[i]);
849 QString urlStr(url.string());
854 if (mimeType == "application/x-qt-plugin" || mimeType == "application/x-qt-styled-widget") {
855 object = m_webFrame->page()->createPlugin(element->getAttribute("classid"), qurl, params, values);
856 QWidget *widget = qobject_cast<QWidget *>(object);
857 if (widget && mimeType == "application/x-qt-styled-widget") {
858 CSSComputedStyleDeclaration cssDecl(element);
860 QString styleSheet = element->getAttribute("style");
861 if (!styleSheet.isEmpty())
862 styleSheet += QLatin1Char(';');
864 for (int i = 0; i < numqStyleSheetProperties; ++i) {
865 CSSPropertyID property = qstyleSheetProperties[i];
867 styleSheet += ::getPropertyName(property);
868 styleSheet += QLatin1Char(':');
869 styleSheet += cssDecl.getPropertyValue(property);
870 styleSheet += QLatin1Char(';');
873 widget->setStyleSheet(styleSheet);
877 #if QT_VERSION >= 0x040400
879 QWebPluginFactory* factory = m_webFrame->page()->pluginFactory();
881 object = factory->create(mimeType, qurl, params, values);
886 QWidget *widget = qobject_cast<QWidget *>(object);
887 QWidget *view = m_webFrame->page()->view();
888 if (widget && view) {
889 widget->setParent(view);
890 Widget* w= new Widget();
891 w->setNativeWidget(widget);
894 // FIXME: make things work for widgetless plugins as well
901 void FrameLoaderClientQt::redirectDataToPlugin(Widget* pluginWidget)
907 Widget* FrameLoaderClientQt::createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL,
908 const Vector<String>& paramNames, const Vector<String>& paramValues)
914 String FrameLoaderClientQt::overrideMediaType() const
919 QString FrameLoaderClientQt::chooseFile(const QString& oldFile)
921 return webFrame()->page()->chooseFile(webFrame(), oldFile);
927 #include "moc_FrameLoaderClientQt.cpp"