| Line | Source Code | Coverage |
|---|
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | | - |
| 5 | | - |
| 6 | | - |
| 7 | | - |
| 8 | class QOpenUrlHandlerRegistry : public QObject | - |
| 9 | { | - |
| 10 | public: template <typename T> inline void qt_check_for_QOBJECT_macro(const T &_q_argument) const { int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); i = i + 1; } static const QMetaObject staticMetaObject; virtual const QMetaObject *metaObject() const; virtual void *qt_metacast(const char *); static inline QString tr(const char *s, const char *c = 0, int n = -1) { return staticMetaObject.tr(s, c, n); } __attribute__ ((__deprecated__)) static inline QString trUtf8(const char *s, const char *c = 0, int n = -1) { return staticMetaObject.tr(s, c, n); } virtual int qt_metacall(QMetaObject::Call, int, void **); private: __attribute__((visibility("hidden"))) static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); struct QPrivateSignal {}; | - |
| 11 | public: | - |
| 12 | inline QOpenUrlHandlerRegistry() : mutex(QMutex::Recursive) {} executed: }Execution Count:1 | 1 |
| 13 | | - |
| 14 | QMutex mutex; | - |
| 15 | | - |
| 16 | struct Handler | - |
| 17 | { | - |
| 18 | QObject *receiver; | - |
| 19 | QByteArray name; | - |
| 20 | }; | - |
| 21 | typedef QHash<QString, Handler> HandlerHash; | - |
| 22 | HandlerHash handlers; | - |
| 23 | | - |
| 24 | public : | - |
| 25 | void handlerDestroyed(QObject *handler); | - |
| 26 | | - |
| 27 | }; | - |
| 28 | | - |
| 29 | static QOpenUrlHandlerRegistry *handlerRegistry() { static QGlobalStatic<QOpenUrlHandlerRegistry > thisGlobalStatic = { { (0) }, false }; if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { QOpenUrlHandlerRegistry *x = new QOpenUrlHandlerRegistry; if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) delete x; else static QGlobalStaticDeleter<QOpenUrlHandlerRegistry > cleanup(thisGlobalStatic); } return thisGlobalStatic.pointer.load(); } never executed: delete x; executed: return thisGlobalStatic.pointer.load();Execution Count:5 partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x)| no Evaluation Count:0 | yes Evaluation Count:1 |
evaluated: !thisGlobalStatic.pointer.load()| yes Evaluation Count:1 | yes Evaluation Count:4 |
partially evaluated: !thisGlobalStatic.destroyed| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-5 |
| 30 | | - |
| 31 | void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler) | - |
| 32 | { | - |
| 33 | HandlerHash::Iterator it = handlers.begin(); | - |
| 34 | while (it != handlers.end()) { evaluated: it != handlers.end()| yes Evaluation Count:3 | yes Evaluation Count:2 |
| 2-3 |
| 35 | if (it->receiver == handler) { evaluated: it->receiver == handler| yes Evaluation Count:2 | yes Evaluation Count:1 |
| 1-2 |
| 36 | it = handlers.erase(it); | - |
| 37 | } else { executed: }Execution Count:2 | 2 |
| 38 | ++it; | - |
| 39 | } executed: }Execution Count:1 | 1 |
| 40 | } | - |
| 41 | } executed: }Execution Count:2 | 2 |
| 42 | bool QDesktopServices::openUrl(const QUrl &url) | - |
| 43 | { | - |
| 44 | QOpenUrlHandlerRegistry *registry = handlerRegistry(); | - |
| 45 | QMutexLocker locker(®istry->mutex); | - |
| 46 | static bool insideOpenUrlHandler = false; | - |
| 47 | | - |
| 48 | if (!insideOpenUrlHandler) { partially evaluated: !insideOpenUrlHandler| yes Evaluation Count:3 | no Evaluation Count:0 |
| 0-3 |
| 49 | QOpenUrlHandlerRegistry::HandlerHash::ConstIterator handler = registry->handlers.constFind(url.scheme()); | - |
| 50 | if (handler != registry->handlers.constEnd()) { evaluated: handler != registry->handlers.constEnd()| yes Evaluation Count:2 | yes Evaluation Count:1 |
| 1-2 |
| 51 | insideOpenUrlHandler = true; | - |
| 52 | bool result = QMetaObject::invokeMethod(handler->receiver, handler->name.constData(), Qt::DirectConnection, QArgument<QUrl >("QUrl", url)); | - |
| 53 | insideOpenUrlHandler = false; | - |
| 54 | return result; executed: return result;Execution Count:2 | 2 |
| 55 | } | - |
| 56 | } executed: }Execution Count:1 | 1 |
| 57 | if (!url.isValid()) partially evaluated: !url.isValid()| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 58 | return false; executed: return false;Execution Count:1 | 1 |
| 59 | QPlatformServices *platformServices = QGuiApplicationPrivate::platformIntegration()->services(); | - |
| 60 | if (!platformServices) { never evaluated: !platformServices | 0 |
| 61 | QMessageLogger("util/qdesktopservices.cpp", 198, __PRETTY_FUNCTION__).warning("%s: The platform plugin does not support services.", __PRETTY_FUNCTION__); | - |
| 62 | return false; never executed: return false; | 0 |
| 63 | } | - |
| 64 | return url.scheme() == QString::fromUtf8("" "file" "", sizeof("file") - 1) ? | 0 |
| 65 | platformServices->openDocument(url) : platformServices->openUrl(url); never executed: return url.scheme() == QString::fromUtf8("" "file" "", sizeof("file") - 1) ? platformServices->openDocument(url) : platformServices->openUrl(url); | 0 |
| 66 | } | - |
| 67 | void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method) | - |
| 68 | { | - |
| 69 | QOpenUrlHandlerRegistry *registry = handlerRegistry(); | - |
| 70 | QMutexLocker locker(®istry->mutex); | - |
| 71 | if (!receiver) { partially evaluated: !receiver| no Evaluation Count:0 | yes Evaluation Count:2 |
| 0-2 |
| 72 | registry->handlers.remove(scheme); | - |
| 73 | return; | 0 |
| 74 | } | - |
| 75 | QOpenUrlHandlerRegistry::Handler h; | - |
| 76 | h.receiver = receiver; | - |
| 77 | h.name = method; | - |
| 78 | registry->handlers.insert(scheme, h); | - |
| 79 | QObject::connect(receiver, "2""destroyed(QObject*)", | - |
| 80 | registry, "1""handlerDestroyed(QObject*)"); | - |
| 81 | } executed: }Execution Count:2 | 2 |
| 82 | | - |
| 83 | | - |
| 84 | | - |
| 85 | | - |
| 86 | | - |
| 87 | | - |
| 88 | void QDesktopServices::unsetUrlHandler(const QString &scheme) | - |
| 89 | { | - |
| 90 | setUrlHandler(scheme, 0, 0); | - |
| 91 | } | 0 |
| 92 | extern __attribute__((visibility("default"))) QString qt_applicationName_noFallback(); | - |
| 93 | | - |
| 94 | QString QDesktopServices::storageLocationImpl(QStandardPaths::StandardLocation type) | - |
| 95 | { | - |
| 96 | if (type == QStandardPaths::DataLocation) { partially evaluated: type == QStandardPaths::DataLocation| yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
| 97 | | - |
| 98 | | - |
| 99 | | - |
| 100 | const QString compatAppName = qt_applicationName_noFallback(); | - |
| 101 | const QString baseDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); | - |
| 102 | return baseDir + QLatin1String("/data/") | 2 |
| 103 | + QCoreApplication::organizationName() + QLatin1Char('/') | 2 |
| 104 | + compatAppName; executed: return baseDir + QLatin1String("/data/") + QCoreApplication::organizationName() + QLatin1Char('/') + compatAppName;Execution Count:2 | 2 |
| 105 | | - |
| 106 | } | - |
| 107 | return QStandardPaths::writableLocation(type); never executed: return QStandardPaths::writableLocation(type); | 0 |
| 108 | } | - |
| 109 | | - |
| 110 | | - |
| 111 | | - |
| 112 | | - |
| | |