Bug 32704

Summary: Crash with QWebPluginFactory plugins replacing NPAPI plugins
Product: WebKit Reporter: Pierre <pinaraf>
Component: WebKit QtAssignee: Nobody <webkit-unassigned>
Status: RESOLVED DUPLICATE    
Severity: Major CC: jturcotte, laszlo.gombos
Priority: P2 Keywords: Qt
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
Test case
none
Test case - fixed compilation... none

Pierre
Reported 2009-12-18 02:47:58 PST
Created attachment 45133 [details] Test case Hi I'm currently building a web browser that has to be protected from the user : the user should not be able to access the local file system for instance. In order to do this, plugins for instance must be disabled (except Flash). When I do that using a custom QWebPluginFactory that returns a widget in every case, I get a crash on windows with the acrobat reader plugin. You can check this behaviour with the attached source file. How to reproduce the problem : - launch the test case - search "PDF example" - click on the first link, a simple PDF file. Without the acrobat reader plugin, there is no crash because the PDF file is considered as unsupported content. Thanks Pierre
Attachments
Test case (1.98 KB, text/plain)
2009-12-18 02:47 PST, Pierre
no flags
Test case - fixed compilation... (1.95 KB, application/octet-stream)
2009-12-18 03:01 PST, Pierre
no flags
Pierre
Comment 1 2009-12-18 03:01:22 PST
Created attachment 45135 [details] Test case - fixed compilation... Sorry, I messed a bit with my files...
Pierre
Comment 2 2009-12-18 06:33:22 PST
Well, the problem is much more generic. When a NPAPI plugin registers itself for a mime type, this mime type will no longer be considered a unsupported content, so WebKit will always try to open it itself. It'll call the plugin to render this content. But when a QWebPluginFactory takes over, then trouble begins. It looks like QWebPluginFactory's plugins can't be used this way, they have to be embedded inside a web page, thus the crashes. You can get this problem on linux too using the flash plugin : just replace http://www.google.fr with the URL of a flash video directly in the source code of the test case, and it'll crash. Here is the backtrace : #0 0x00007ffff778fab0 in typeinfo name for WebCore::QtPluginWidget () from /usr/lib/libQtWebKit.so.4 #1 0x00007ffff729c89e in WebCore::FrameLoaderClientQt::committedLoad (this=0x6db2e0, loader=0x7fffeb8e5080, data=0x75d088 "FWS\005\271\n", length=1067) at ../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:697 #2 0x00007ffff709f02d in WebCore::DocumentLoader::commitLoad (this=0x7fffeb8e5080, data=0x75d088 "FWS\005\271\n", length=1067) at loader/DocumentLoader.cpp:342 #3 0x00007ffff70dd3e9 in WebCore::ResourceLoader::didReceiveData (this=0x7fffeb90a680, data=0x75d088 "FWS\005\271\n", length=1067, lengthReceived=1067, allAtOnce=120) at loader/ResourceLoader.cpp:248 #4 0x00007ffff70ceacc in WebCore::MainResourceLoader::didReceiveData (this=0x7fffeb90a680, data=0x75d088 "FWS\005\271\n", length=1067, lengthReceived=1067, allAtOnce=<value optimized out>) at loader/MainResourceLoader.cpp:374 #5 0x00007ffff727ce9c in WebCore::QNetworkReplyHandler::forwardData (this=0x6d0c10) at platform/network/qt/QNetworkReplyHandler.cpp:360 #6 0x00007ffff727e598 in WebCore::QNetworkReplyHandler::qt_metacall (this=0x6d0c10, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=<value optimized out>) at .moc/release-shared/moc_QNetworkReplyHandler.cpp:84 #7 0x00007ffff59f3d38 in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4 #8 0x00007ffff5ef508d in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #9 0x00007ffff5efb3bd in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #10 0x00007ffff59e3bdc in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 #11 0x00007ffff59e4abc in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQtCore.so.4 #12 0x00007ffff5a0db23 in ?? () from /usr/lib/libQtCore.so.4 #13 0x00007ffff30a713a in g_main_context_dispatch () from /lib/libglib-2.0.so.0 #14 0x00007ffff30aa998 in ?? () from /lib/libglib-2.0.so.0 #15 0x00007ffff30aab4c in g_main_context_iteration () from /lib/libglib-2.0.so.0 #16 0x00007ffff5a0d68c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 #17 0x00007ffff5fa553f in ?? () from /usr/lib/libQtGui.so.4 #18 0x00007ffff59e24c2 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 #19 0x00007ffff59e2894 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 #20 0x00007ffff59e4d46 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4 #21 0x0000000000402444 in main (argc=1, argv=0x7fffffffe288) at main.cpp:54
Pierre
Comment 3 2009-12-18 08:06:00 PST
Update the bug flags to reflect my last comment...
Pierre
Comment 4 2009-12-21 02:40:52 PST
Improve the bug report title
Tor Arne Vestbø
Comment 5 2010-03-10 06:24:25 PST
Please follow the QtWebKit bug reporting guidelines when reporting bugs. See http://trac.webkit.org/wiki/QtWebKitBugs Specifically: - The 'QtWebKit' component should only be used for bugs/features in the public QtWebKit API layer, not to signify that the bug is specific to the Qt port of WebKit http://trac.webkit.org/wiki/QtWebKitBugs#Component - Add the keyword 'Qt' to signal that it's a Qt-related bug http://trac.webkit.org/wiki/QtWebKitBugs#Keywords
Jocelyn Turcotte
Comment 6 2010-03-17 04:58:47 PDT
I could reproduce the crash on Windows and the stack trace is the same as bug 29450 so I will resolve this one as duplicate. I was not able to reproduce the crash on linux using the flash video method with your test case on Qt4.6 + WebKit trunk. If you think that the flash crash is a different bug and you have more information about it, it would be interesting if you can add it to this bug report. thanks *** This bug has been marked as a duplicate of bug 29450 ***
Note You need to log in before you can comment on or make changes to this bug.