OpenBoard-org / OpenBoard

OpenBoard is a cross-platform interactive whiteboard application intended for use in a classroom setting.
https://openboard.ch/
GNU General Public License v3.0
2.35k stars 425 forks source link

Qt Known issues according to OS and Qt version (WIP) #706

Open kaamui opened 1 year ago

kaamui commented 1 year ago

This issue helps keeping track of Qt known issues impacting OpenBoard.

bold = blocker issues

5.15.0

Ubuntu

Windows

macOS

5.15.2

Ubuntu

Windows

macOS

6.2.4

Ubuntu

Windows

macOS

6.4.0

Ubuntu

Windows

macOS

kaamui commented 1 year ago

Random rashes during navigation

6.2.4

result in simplebrowser : image

simplebrowser logs :

[13768:13787:1111/094150.867790:ERROR:cert_issuer_source_aia.cc(32)] Error parsing cert retrieved from AIA (as DER):
ERROR: Couldn't read tbsCertificate as SEQUENCE
ERROR: Failed parsing Certificate

[13768:13787:1111/094150.870591:ERROR:cert_verify_proc_builtin.cc(637)] CertVerifyProcBuiltin for cdn.webglstats.com failed:
----- Certificate i=0 (CN=webglstats.com) -----
ERROR: Time is after notAfter

----- Certificate i=1 (CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US) -----
ERROR: Time is after notAfter

[13768:13800:1111/094150.872883:ERROR:ssl_client_socket_impl.cc(947)] handshake failed; returned -1, SSL error code 1, net_error -201
js: Mixed Content: The page at 'https://webglsamples.org/' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/css?family=Oleo+Script:400|Open+Sans:300,300italic,600,600italic,800'. This request has been blocked; the content must be served over HTTPS.

result in OpenBoard : crash OpenBoard logs

[14299:14320:1111/094353.726631:ERROR:cert_issuer_source_aia.cc(32)] Error parsing cert retrieved from AIA (as DER):
ERROR: Couldn't read tbsCertificate as SEQUENCE
ERROR: Failed parsing Certificate

[14299:14320:1111/094353.732298:ERROR:cert_verify_proc_builtin.cc(637)] CertVerifyProcBuiltin for cdn.webglstats.com failed:
----- Certificate i=0 (CN=webglstats.com) -----
ERROR: Time is after notAfter

----- Certificate i=1 (CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US) -----
ERROR: Time is after notAfter

[14299:14344:1111/094353.733391:ERROR:ssl_client_socket_impl.cc(947)] handshake failed; returned -1, SSL error code 1, net_error -201
letsfindaway commented 1 year ago

result in OpenBoard : crash OpenBoard logs

Cannot reproduce the crash. for me using Qt 5.15.2 or 6.2.2 (see below) the same dialog appears as on simplebrowser and choosing either answer the loading continues. This behavior is the same whether I invoke the page in the web browser or in a widget. Do you have a stack trace?

kaamui commented 1 year ago

Yep.

1  doActivate<false>                                                                                                                                                               qobject_p.h        101  0x7fffe999a291 
2  QMetaObject::activate                                                                                                                                                           qobject.cpp        3972 0x7fffe9991dd0 
4  QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QWebEngineCertificateError const&>, void, void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call qobjectdefs_impl.h 152  0x555555963084 
5  QtPrivate::FunctionPointer<void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call<QtPrivate::List<QWebEngineCertificateError const&>, void>                        qobjectdefs_impl.h 185  0x555555962708 
6  QtPrivate::QSlotObject<void (QWebEnginePage:: *)(QWebEngineCertificateError const&), QtPrivate::List<QWebEngineCertificateError const&>, void>::impl                            qobjectdefs_impl.h 395  0x555555961dcd 
7  QtPrivate::QSlotObjectBase::call                                                                                                                                                qobjectdefs_impl.h 375  0x7fffe999a3da 
8  doActivate<false>                                                                                                                                                               qobject.cpp        3912 0x7fffe999a3da 
9  QMetaObject::activate                                                                                                                                                           qobject.cpp        3972 0x7fffe9991dd0 
11 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QWebEngineCertificateError const&>, void, void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call qobjectdefs_impl.h 152  0x555555963084 
12 QtPrivate::FunctionPointer<void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call<QtPrivate::List<QWebEngineCertificateError const&>, void>                        qobjectdefs_impl.h 185  0x555555962708 
13 QtPrivate::QSlotObject<void (QWebEnginePage:: *)(QWebEngineCertificateError const&), QtPrivate::List<QWebEngineCertificateError const&>, void>::impl                            qobjectdefs_impl.h 395  0x555555961dcd 
14 QtPrivate::QSlotObjectBase::call                                                                                                                                                qobjectdefs_impl.h 375  0x7fffe999a3da 
15 doActivate<false>                                                                                                                                                               qobject.cpp        3912 0x7fffe999a3da 
16 QMetaObject::activate                                                                                                                                                           qobject.cpp        3972 0x7fffe9991dd0 
18 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QWebEngineCertificateError const&>, void, void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call qobjectdefs_impl.h 152  0x555555963084 
19 QtPrivate::FunctionPointer<void (QWebEnginePage:: *)(QWebEngineCertificateError const&)>::call<QtPrivate::List<QWebEngineCertificateError const&>, void>                        qobjectdefs_impl.h 185  0x555555962708 
20 QtPrivate::QSlotObject<void (QWebEnginePage:: *)(QWebEngineCertificateError const&), QtPrivate::List<QWebEngineCertificateError const&>, void>::impl                            qobjectdefs_impl.h 395  0x555555961dcd 
... <plus>

I did not give it initially because the same calls repeat over and over. Looks like the same signal/slot connection is "played" (activate -> fail -> retry) until a segmentation fault happens. I'll try with 6.2.2 when I can.

letsfindaway commented 1 year ago

I think you're on Qt 6 with QWebEngine also 6. See these lines:

https://github.com/OpenBoard-org/OpenBoard/blob/99475a37ca7a700e1a63e46fcbef420294c8bd83/src/web/simplebrowser/webpage.cpp#L73-L75

I assume the slot must be handleCertificateError instead.

And the version check in the header file should check on QTWEBENGINEWIDGETS_VERSION instead of QT_VERSION.

kaamui commented 1 year ago

Oh OK. It's indeed not the same line in the simplebrowser example, provided with Qt 6.2.4 :

WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
    : QWebEnginePage(profile, parent)
{
    connect(this, &QWebEnginePage::selectClientCertificate, this, &WebPage::handleSelectClientCertificate);
    connect(this, &QWebEnginePage::certificateError, this, &WebPage::handleCertificateError);
}

void WebPage::handleCertificateError(QWebEngineCertificateError error)
{
    error.defer();
    QTimer::singleShot(0, this,
                       [this, error]() mutable { emit createCertificateErrorDialog(error); });
}
kaamui commented 1 year ago

I think you're on Qt 6 with QWebEngine also 6. See these lines:

Aren't you ?

letsfindaway commented 1 year ago

I think you're on Qt 6 with QWebEngine also 6. See these lines:

Aren't you ?

Just because the error does not occur on Qt 5.15. And when saying it does not occur on Qt 6.2.2 for me I was lying. I was on 15.5 twice and did not notice.

kaamui commented 1 year ago

No I mean you said you tested on 5.15 and 6.2.2 so I was wondering if you were specifying "Qt6 and QWebengine also 6" because you're mixing Qt 5.15 with webengine 6 (I thought it was not possible)

kaamui commented 1 year ago

I think you're on Qt 6 with QWebEngine also 6. See these lines:

Aren't you ?

Just because the error does not occur on Qt 5.15. And when saying it does not occur on Qt 6.2.2 for me I was lying. I was on 15.5 twice and did not notice.

oh ok

letsfindaway commented 1 year ago

Is there already a release plan for upcoming 1.7.0? When are you planing to create the first release candidate?

And based on the list above: Do you already have candidates for the Qt versions to be used on the various platforms? For Qt 6: will it more likely be the Qt 6.2 LTS version, which will get some longer support, or do you plan to use the most recent available versions, or even wait for Qt 6.5, which is again LTS?

kaamui commented 1 year ago

The goal is to have 1.7.0 available, if possible, around summer 2023, with a deadline on September 2023.

For the Qt version, no decision has been made, for now.

On Ubuntu, for example, there's this issue with the Gnome dock, that is fixed in 5.15.10 (Commercial release in May 2022 so probably sources will be available in May 2023), 6.2.5 (Commercial) 6.3.1 (open-source) and 6.4.0 (open-source). Depending on the regressions I'll find when I test it, 6.3.1 could become the target for Ubuntu 20.04 or not. It's really hard to tell right now. There is also this issue with Documents Mode where the treeview is broken with Qt 6 versions (tested on Ubuntu and Windows, only happening on Ubuntu). If no solution is found about this particular issue, I'll go with Qt 5.15.

On MacOS, Qt 6 will clearly be targeted because of "universal" packaging support (build/package once for intel and arm processors).

On Windows, it will depend on the issue with the menus not showing. At this time, only fixed in Qt 5.15

In a word, I'll use the Qt version providing the most stable user experience on each platform.

kaamui commented 1 year ago

There is also this issue with Documents Mode where the treeview is broken with Qt 6 versions (tested on Ubuntu and Windows, only happening on Ubuntu). If no solution is found about this particular issue, I'll go with Qt 5.15.

Tried again and the issue is appearing on Windows too with Qt6. Maybe a rebuild/qmake is needed when switching of Qt version and UI's involved (I didn't rebuild/relaunch qmake the last time I tried).

It's good news, I guess... 😄

kaamui commented 1 year ago

Document tree view issues (date columns not shown, splitter not movable)

DateTime format issue

On Qt 6, QDateTime::fromString("2022-11-08T11:37:52ZZ", Qt::ISODate)returns an invalid QDateTime, where it returns QDateTime(2022-11-08 11:37:52.000 UTC Qt::UTC) with Qt 5.15.

Not sure if it's a fix by Qt 6 or a regression... I'll have to re-study date formats to understand/remember what's the expected behavior. I suspect that the standard format for UTC just needs a Z, not two.

edit : fix : 97bf91e

(todo : check if fixing it in UBStringUtils is not too much time consuming) edit : b1db5ea. Even if QString uses implicit sharing, this commit probably improves a bit performances by reducing the amount of operations performed to display dates in the document treeview (each time the treview changes, UBDocumentTreeModel::data() was called for each visible item, and for each, the document date was displayed by performing a QVariant -> QDateTime -> QString -> QVariant conversion).

Splitter issue

The issue was caused by the topLeftWidget having an horizontal size policy of type "Fixed" (cf. 8611a842d7)