summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* take_snapshot.py: Do not adopt .gitattributes files.Zeno Albisser2014-12-031-0/+1
| | | | | | | | | Some of these files enforce crlf conversion. For packaging reasons we have to make sure we never have crlf in our repository. Change-Id: I3b4da212c587f8461819f3d01e4967ebefaef4b0 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
* take_snapshot.py should only clear directories.Zeno Albisser2014-12-031-1/+1
| | | | | | | | Specifically we want to keep the file src/3rdparty/.gitattributes. Change-Id: I76f3fe6d6f8b8477834e31a4806f23928a0ca010 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
* Whitelist/Blacklist several files for the snapshot based on Chromium ↵Zeno Albisser2014-12-031-2/+10
| | | | | | | | | | | | | | | | | | | 40.0.2214.5. Include files related to: - components_strings - chrome_version.rc.version - error_page - *.grdp files within components Exclude files related to: - junit - polymer - google_input_tools - cython Change-Id: I2388ec7694890d573cbea843de23471c6a5395a6 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
* do proper escaping before replacingStephan Binner2014-12-021-3/+5
| | | | | Change-Id: I9d11038779494a3bb14107369b54c06baead96a9 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Merge remote-tracking branch 'origin/5.4' into devAndras Becsi2014-12-0125-64/+387
|\ | | | | | | | | | | | | | | | | Conflicts: src/core/access_token_store_qt.cpp src/core/access_token_store_qt.h src/core/content_browser_client_qt.cpp Change-Id: Id319ad0d87ce071e63d9c6c22b4fc35523ddfa74
| * Fix deployment problems with developer buildsPeter Varga2014-11-284-2/+47
| | | | | | | | | | | | | | | | | | | | | | This fix deploys the following files into qtbase without make install: - qtwebengine_resources.pak - translations/qtwebengine_locales/*.pak - icudtl.dat - plugins/qtwebengine/libffmpegsumo.so Change-Id: Id2c02f03fb01571942d3135b215ebb8ad7a3221b Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| * Merge remote-tracking branch 'origin/5.4.0' into 5.4Andras Becsi2014-11-2724-50/+383
| |\ | | | | | | | | | Change-Id: I2c48688f5f034233660bd7891693f81525fc1d6d
| | * Disable using the ICU data file on embedded linuxAndras Becsi2014-11-241-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Since we use the system ICU we do not need the extra data file. This fixes a crash caused by missing icudtl.dat file. Change-Id: Ic7a6ad83d6595ea3a89c736c281499636b05945e Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
| | * Use a relative install_name for QtWebEngineProcess' dependenciesv5.4.0-rc1Jocelyn Turcotte2014-11-201-2/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until we can rely on Qt using @rpath on OSX, QtWebEngineProcess' dependencies must either be updated by macdeployqt when creating an .app bundle, either we must make that path relative at build time. Since QtWebEngineProcess.app is always deployed inside QtWebEngineCore.framework, we can safely assume that the dylib is always in a parent directory and that QtCore.framework can be found one directory higher. The additional dependencies of QtWebEngineCore.framework will be handled by the dynamic linker when it gets loaded, but this only works for QtWebEngineProcess when macdeployqt uses @loader_path instead of @executable_path (then relative to the application which is in a different directory than QtWebEngineProcess). This can be forced by passing a non-empty value for its -executable= command-line argument (e.g `macdeployqt Browser.app -executable=Browser.app/Contents/MacOS/Browser`) All this will be much simpler once we got Qt framework builds to use @rpath instead in a future minor version. Task-number: QTBUG-41611 Change-Id: Ied46c65a09f7033b622708da6e3d85855f9abf34 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| | * Doc: Fix issues related to example docsTopi Reinio2014-11-175-2/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add documentation for Quick Nano Browser - Add all examples to the correct group - Add instructions to run the examples - Qt WebEngine Widgets index page: Add examples section Task-number: QTBUG-42668 Change-Id: Ie60f8708336b9c147d0c22afb555fe87287deddc Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
| | * Add missing header guardsPierre Rossi2014-11-152-0/+8
| | | | | | | | | | | | | | | Change-Id: I67d0040c2e9f00e8a7b842ac1228212c0e93873c Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
| | * Process touch events in sorted order.Zeno Albisser2014-11-121-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We are mapping a single QTouchEvent to multiple MotionEventQt for Chromium. For gesture recognition it is important that these motion events are being processed in a sorted manner, as a move event might trigger a different gesture depending on how many ACTION_DOWN or ACTION_POINTER_DOWN were received before. It is particularly illegal to process an ACTION_MOVE with multiple touch points without having received a ACTION_POINTER_DOWN before. Change-Id: I75d22dd845774a14b5f590e0e0ce46263c4a49f4 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| | * Add a stub AccessTokenStore implementation.Robin Burchell2014-11-125-0/+122
| | | | | | | | | | | | | | | | | | | | | | | | | | | Callers inside Chromium expect an implementation of AccessTokenStore to exist. This fixes crashes with the geolocation-based APIs, exposed on e.g. google.com when faking an Android UA (as well as other places, probably). Change-Id: I45e6b483e096d5165fefd86927cdf34e799cc4d9 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
| | * Merge remote-tracking branch 'origin/5.4' into 5.4.0Oswald Buddenhagen2014-11-121-2/+2
| | |\ | | |/ | |/| | | | Change-Id: I3b7df1ada08a8985734d804208b50cd5e0403903
| | * Disable accelerated 2D canvas rendering with ANGLEJocelyn Turcotte2014-11-111-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ANGLE isn't thread-safe and we're already taking a risk by letting Chromium do texture upload from the GPU thread with a shared GL context. Any kind of drawing happening concurrently between the GPU thread and the Qt scene graph thread might currently end up drawing on the same device context and this is creating visual artifacts and Direct3D errors. We're already disabling WebGL but we should also disable accelerated 2D canvas rendering to lower that risk. We should ultimately disable ANGLE from within Chromium or fix multithreading issues to properly support GL rendering scenarios across threads. Task-number: QTBUG-41627 Change-Id: I37a7a778f0e1066a454f51bb38e98df4dea8767e Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
| | * Merge "Merge remote-tracking branch 'origin/5.4' into 5.4.0" into ↵Jani Heikkinen2014-11-1016-42/+71
| | |\ | | | | | | | | | | | | refs/staging/5.4.0
| | | * Merge remote-tracking branch 'origin/5.4' into 5.4.0Oswald Buddenhagen2014-11-1016-42/+71
| | | |\ | | | | | | | | | | | | | | | Change-Id: I01615a492c958bf123deeef5d2ddf9fb01b1a9d0
| | * | | Update snapshot sha1 to include various crash fixes for the release.Andras Becsi2014-11-101-0/+0
| | |/ / | | | | | | | | | | | | | | | | Change-Id: I2d04e910c7a08e1c630bc490d1f8b1be3d27a6f1 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
| | * | Disable error page while testing loadFail signal of Quick APIPeter Varga2014-11-062-15/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Error page should be disabled while testing loadFail signal since testing signals of the internal error page is not possible yet. Change-Id: I07f0bb6378fcbf5d18634197808801c94606803c Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| | * | Fix crashes in QQuickWebEngineSettingsPeter Varga2014-11-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove QQuickWebEngineSettingsPrivate object's pointer from the global setting list before the object is destructed. Change-Id: I1cca6bf8aa2438903692d9e2ef863c8fc543adbd Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| | * | Deploy external data in QtWebEngineCore.framework for framework buildsJocelyn Turcotte2014-11-064-16/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is currently no convenient way to deploy QtWebEngine into an application bundle on OSX. macdeployqt copies frameworks into a .app bundle's Frameworks directory but this makes no sense unless all the needed files are also distributed with the bundle. This patch moves: - The ffmpegsumo.so library into Libraries/ - Locale .pak files, qtwebengine_resources.pak and icudtl.dat into Resources/ - QtWebEngineProcess into its own .app bundle, itself into Helpers/ QMAKE_BUNDLE_DATA is used to copy files into the bundle while INSTALLS is used when installing normally. A LOCALE_LIST is explicitly listed since QMAKE_BUNDLE_DATA can't handle the * glob to match all source files. Change-Id: I5c0df57b4b9e93f9cce34a74a6e024bf90d37b5c Task-number: QTBUG-41611 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| | * | Move extra installs from core.pro to core_module.proJocelyn Turcotte2014-11-062-27/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | core_module.pro is the one responsible for deployment of the binary so it makes sense to also let it handle the other files to install. This leaves core.pro to only handle sub-projects dependencies. Change-Id: Ibe433eceec7fb0a9f806dfa89dccb0bedeaccc59 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | For correctness fileListingHelper template function must return some value.Zeno Albisser2014-11-281-1/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I8f1c109bfeae72971539a68dfd1216d1bd185951 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | Make BrowserContext name configurableAllan Sandfeld Jensen2014-11-263-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a name to BrowserContexts to separate cookies and cache paths. Change-Id: I3f00444dc7e87d1a63383053e91a4bc7056553bb Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | | | Don't use Q_FOREACH on QHash::valuesJocelyn Turcotte2014-11-251-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QHash::values will copy all values into a new QList, increasing the ref-count of all stored QSharedPointer temporarily. Use the QHash iterators directly to avoid this. Change-Id: I49b1af24b706da195dc4df7206133f039198aad7 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* | | | Disable the GPU process in cases where we can't setup context sharingJocelyn Turcotte2014-11-251-9/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This explicitly disables WebGL and automatic Resource transfer through GL context sharing in cases that we know this won't work. This is currently the case for the QtQuick 2D Renderer as well as when using llvmpipe on Windows. It could be possible to get Chromium to use GL through opengl32sw.dll but the change would be more intrusive. Fall back to the Chromium software compositor code path in that case at the cost of losing WebGL support with llvmpipe. Change-Id: I9c1d27ed982dccbe005c8742162c343cc6284e74 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Support TransferableResource::is_softwareJocelyn Turcotte2014-11-259-24/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the GPU process fails to initialize, or when the --disable-gpu switch is provided, the delegating renderer will transfer resource mailboxes through shared memory pixel data instead of through shared texture IDs in the GPU process. Handle this by uploading the pixel data ourselves with createTextureFromImage, also allowing us to render tiles in the QtQuick 2D Renderer. Change-Id: I70ad7122cd0e52dd5ab435ae01e7f032b8e1194e Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Extract the resource logic out of MailboxTextureJocelyn Turcotte2014-11-252-72/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As a first step to allow using plain textures for software resources, split the Chromium resource handling responsibility into a ResourceHolder class. This also moves the static findMailboxTexture into a member DelegatedFrameNode::findAndHoldResource in preparation for how texture refcounting will work in the following patch. Change-Id: Iaa64273c187af022045bbcaa956fcaa1f3defabc Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Avoid relying on QOpenGL classes to handle RenderPassesJocelyn Turcotte2014-11-2514-116/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use QSGLayer and get rid of RenderPassTexture so that we can render intermediate layers with the QtQuick 2D Renderer. This reintroduces the private dependency on QtQuick since the QSGLayer factory methods aren't available publically, and also that we need to use QSGImageNode instead of QSGSimpleTextureNode to use them. Since we can't subclass QSGLayer to hold a reference to SG objects directly in the nodes that use them, store them all in the wrapping DelegatedFrameNode in a SGObjects structs. This works assuming that the DelegatedFrameNode will always be at the root of our nodes, layers and textures; if the scene graph destroys the DelegatedFrameNode all child nodes will be destroyed with it. Change-Id: Iedeceb8f98eb54fd8228a677c366d6df9a270e11 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Don't rely on quads to set the texture sizeJocelyn Turcotte2014-11-251-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What really matters with texture coordinates is the normalized 0-1 coordinate that will end up on vertex attributes. By default QSGSimpleTextureNode will use the full texture size to calculate those coordinates. In that case any texture size will end up with the same (0,0)-(1,1) coordinates, so we don't really need to set the actual texel size of the texture. So instead of relying on dependent quads to come back and set the size on the texture, do like the Chromium compositor does and just make sure that the full normalized texture rect is set on vertices if no texture size was provided on the resource. Since the scene graph doesn't achieve this behavior by default with an empty texture size, set a 1x1 size to get it to do what we want. Change-Id: I48751d2c2f6ea82dcb4bec9e984b64f7e77316f6 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Use the new QSGSimpleTextureNode::sourceRectJocelyn Turcotte2014-11-251-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is cleaner than hacking the QSGGeometry data ourselves. Change-Id: Id2009ac8c6237472e56a11d6daa589e94bf10945 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Rename DelegatedFrameNodeData to ChromiumCompositorDataJocelyn Turcotte2014-11-254-24/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This clarifies that those objects span to the lifetime of a Chromium frame rather than to the DelegatedFrameNode, which can be destroyed by the scene graph when the window is unmapped. The also avoids the confusion with the DelegatedFrameData Chromium structure name. Change-Id: Ibbeb2b10ef18704fc0934e285cca4ead23879646 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | QtQuick: rename the media feature permission enum valuesPierre Rossi2014-11-243-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In the same way it was done for widgets. Change-Id: I03ff6ed587346b00c76cf7314483263fd4f90a2d Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | | | QtQuick: add geolocation permission APIPierre Rossi2014-11-243-4/+16
| | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I1a5fedc4167dd780655b004811211e49631663c5 Reviewed-by: Andras Becsi <andras.becsi@digia.com> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* | | | Wire the geolocation API to QtPositioningPierre Rossi2014-11-2418-21/+487
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If QtPositioning is available, provide chromium with a LocationProvider that uses it as a backend. Change-Id: I53ad3b45e49d0d2d181c1a6459b7be764293c2a6 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | <widgets/browser> Connect PermissionUnknown to the discard buttonSzabolcs David2014-11-202-2/+9
| | | | | | | | | | | | | | | | | | | | Change-Id: Ie5c216e9a07eae403082ab265ad5300d554037ec Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* | | | Use Q_GLOBAL_STATIC instead of local statics for singletonsAndras Becsi2014-11-205-24/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch prevents leaking these objects on shutdown. Change-Id: Ic4a628e0d4dc0b31716f885c1e904b6062cf3ef0 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | | | Refactor path building from QStandardPathPierre Rossi2014-11-191-14/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The duplicated logic was made apparent by the merge conflict resolution. Change-Id: Ib4558ca0b6b5084f851282916cbc9a6615ed33f9 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | Add type_conversion.h to HEADERS so that is shows up in QtCreatorAndras Becsi2014-11-181-0/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I6b018092c8b74fa50bd0a2b42a2014ac4897526f Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | | | Remove unneeded constructor declarationAndras Becsi2014-11-181-1/+0
| | | | | | | | | | | | | | | | | | | | Change-Id: Id7be078bdd96891adefe62b9666d8b66dd318903 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | | | Use the Chrome inspector discovery pageJocelyn Turcotte2014-11-181-17/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The content_shell discovery page is missing some CSS and causes the favicon to repeat as the background. Copy the one from Chrome and change it slightly to remove the page thumbnail. Change-Id: I6aaa12d5c9d5abdbc4dd5c297a69445aa478045e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* | | | Fix the inspectorJocelyn Turcotte2014-11-181-1/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add the missing implementation of DevToolsHttpHandlerDelegate::EnumerateTargets allowing WebEngineViews to appear in the remote debugging's discovery page. This code was mostly taken from content/shell/browser/shell_devtools_delegate.cc Change-Id: I2759d7c424adf4d7acb779a64e0083032691d9ba Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | Remove arguments from QQuickWebEngineSettings signalsJocelyn Turcotte2014-11-182-24/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The convention in the rest of the QtQuick API is to not pass the new value of a changed signal as an argument since the signal handler can easily access the property itself. Change-Id: I0dbf70379f631135c5ad973b46a9f3936d4be115 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* | | | Merge remote-tracking branch 'origin/5.4' into devAllan Sandfeld Jensen2014-11-1162-157/+1240
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/core/browser_context_qt.cpp src/webengine/api/qquickwebengineview_p.h Change-Id: I73bdec03b627b282851d7dda12006d4ab631072c
| * | | Fix build in QWebEnginePage API testSzabolcs David2014-11-101-2/+2
| | |/ | |/| | | | | | | | | | Change-Id: I7cb497ce0f67eaf948caa88930fa1a3040ff4c39 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| * | Cache to QStandardPaths::CacheLocationAllan Sandfeld Jensen2014-11-074-7/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | We should save our cache in the configured CacheLocation, and ensure we are prepared for multiple BrowserContext by caching to a Default subdir. This matches how chromium caches on linux. Change-Id: Ibe914fca35435ea1658565be87747cfabc71e97b Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
| * | Fix enum names of audio/video featuresAllan Sandfeld Jensen2014-11-074-22/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The feature enum names and documentation gave the impression it could control audio and video output, while they only control input. Also removed documentation of non connected feature permissions for Notifications and GeoLocation. Change-Id: Ia35142ca691ebd6059b7472e9803fda8cbd84813 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
| * | Enlarge quicknanobrowser for qt.io.Friedemann Kleint2014-11-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | The default size causes qt.io to look bad and is too small for high resolution screens. Change-Id: Ie417dde8ab32fc4897cd60c292afdc39b9213510 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| * | Add option to disable error pages in quicktestbrowserPeter Varga2014-11-051-0/+8
| | | | | | | | | | | | | | | Change-Id: Id2e62af31f1dc5268fe6b163d2fc0b671f5e491a Reviewed-by: Andras Becsi <andras.becsi@digia.com>
| * | Fix URLs in examples.Friedemann Kleint2014-11-045-10/+11
| | | | | | | | | | | | | | | Change-Id: I528b7c4c22a1c47f54fe1b78a9d781a6af9cfc6b Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>