0

I have a task to implement simple desktop wrapper on QT for our website. Everything works well except for geolocation. Every time browser has to request permission for geolocation usage nothing is happened, geolocation doesn't work. I tried a few solutions from SO and other resources, but nothing helped me. Here is my code:

#include <QLabel>
#include <QWebEnginePage>

class WebEnginePage: public QWebEnginePage{
    Q_OBJECT

public:
    WebEnginePage(QObject *parent = Q_NULLPTR):QWebEnginePage(parent) {
        connect(this, &WebEnginePage::featurePermissionRequested, this, &WebEnginePage::onFeaturePermissionRequested);
    }

protected:
    bool certificateError(const QWebEngineCertificateError &certificateError){
        return true;
    }

private Q_SLOTS:
    void onFeaturePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature){
        setFeaturePermission(securityOrigin, feature, QWebEnginePage::PermissionGrantedByUser);
    }

};

#include <QApplication>
#include <QWebEngineView>
#include <QWebEngineSettings>

#include "main.moc"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);

    QWebEngineView view;
    view.setPage(new WebEnginePage());

    QWebEngineSettings* settings = view.settings();

    settings->setAttribute(QWebEngineSettings::WebAttribute::LocalStorageEnabled, true);
    settings->setAttribute(QWebEngineSettings::WebAttribute::AllowGeolocationOnInsecureOrigins, true);
    view.setUrl(QUrl(here is my url));
    view.resize(1024, 750);
    view.show();

    return app.exec();
}

Could you give me some suggestions, what's wrong with my code?

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
  • what is your OS? – eyllanesc Dec 07 '20 at 21:40
  • @eyllanesc I have to compile and deploy this application on Astra Linux - a fork from Debian. – incompletablefuture Dec 07 '20 at 21:44
  • How did you install Qt? – eyllanesc Dec 07 '20 at 21:45
  • @eyllanesc By downloading installation package from official website and installing it, and also I had to install qt5_default library after that. – incompletablefuture Dec 07 '20 at 21:47
  • With which of the Qt have you compiled your application? – eyllanesc Dec 07 '20 at 21:47
  • @eyllanesc Well, not sure I understand your question correctly. I use Qt Creator for compilation, which is using GCC under the hood. – incompletablefuture Dec 07 '20 at 21:50
  • If you have installed Qt in 2 ways: Installer from the official page and qt5_default then you have 2 Qt, so I ask which of those Qt do you use to compile your application? What is the output of `qDebug() << QLibraryInfo::location(QLibraryInfo::PluginsPath);`? – eyllanesc Dec 07 '20 at 21:52
  • @eyllanesc "/usr/lib/x86_64-linux-gnu/qt5/plugins" – incompletablefuture Dec 07 '20 at 21:55
  • what is the output of `ls /usr/lib/x86_64-linux-gnu/qt5/plugins/position`? – eyllanesc Dec 07 '20 at 21:57
  • @eyllanesc There are 3 files there: libqtposition_geoclue.so, libqtposition_gpsd.so, libqtposition_positionpoll.so – incompletablefuture Dec 07 '20 at 22:00
  • what is the output of `ldd /usr/lib/x86_64-linux-gnu/qt5/plugins/position/libqtposition_geoclue.so` – eyllanesc Dec 07 '20 at 22:01
  • @eyllanesc linux-vdso.so.1 (0x00007ffc7abda000) libQt5Positioning.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Positioning.so.5 (0x00007aabb8fed000) libQt5DBus.so.5 => /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5 (0x00007aabb8d5d000) libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007aabb865a000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007aabb82d8000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007aabb7f39000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007aabb7c35000) – incompletablefuture Dec 07 '20 at 22:05
  • libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007aabb7a1e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007aabb7801000) libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007aabb75b1000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007aabb7397000) libicui18n.so.63 => /usr/lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007aabb6ece000) libicuuc.so.63 => /usr/lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007aabb6b04000) – incompletablefuture Dec 07 '20 at 22:05
  • libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007aabb6895000) libdouble-conversion.so.1 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007aabb6683000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007aabb647f000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007aabb616b000) /lib64/ld-linux-x86-64.so.2 (0x00007aabb9495000) libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007aabb9605000) – incompletablefuture Dec 07 '20 at 22:05
  • libicudata.so.63 => /usr/lib/x86_64-linux-gnu/libicudata.so.63 (0x00007aabb457d000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007aabb430a000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007aabb40e2000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007aabb3eda000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007aabb3cb4000) liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007aabb3aa2000) libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007aabb3762000) – incompletablefuture Dec 07 '20 at 22:06
  • libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007aabb354e000) – incompletablefuture Dec 07 '20 at 22:06
  • Try running the following: `sudo apt-get install geoclue-2.0` `sudo systemctl enable geoclue.service` `sudo systemctl start geoclue.service` – eyllanesc Dec 07 '20 at 23:31
  • @eyllanesc It seems like it didn't help. I did all you said, geoclue service is running, but I still have my problem. You know, in usual browser everything works correctly, but problem in my QT application. I give permission for geolocation to QWebEngineView, but our JS code is still waiting for permission request to be approved. – incompletablefuture Dec 08 '20 at 09:21

0 Answers0