summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
Commit message (Collapse)AuthorAgeFilesLines
* Fix 'setDownloadDirectory' for download item on 'SavePage' actionKirill Burtsev2019-11-293-3/+5
| | | | | | | | | | | | | | Chromium's DownloadManager doesn't create its download items before path for saving page is confirmed. So assert inside updateDownloadPath was not correct. Moreover, the name is confusing because it's not really updating anything. Remove it and use ProfileAdapterClient::DownloadInfo timestamp to determine updated filename after directory change. Ammends recent new api for changing download directory 0884fab3b1. Fixes: QTBUG-80372 Change-Id: If9efb52979deb3cf21fc4e12989173c85e04e090 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* Merge remote-tracking branch 'origin/5.13' into 5.14Allan Sandfeld Jensen2019-11-141-26/+16
|\ | | | | | | Change-Id: Id70f0288cb1f2df758c9fd21f02a5c037594b25c
| * Redo scale handling of pdf when printingMichal Klocek2019-10-311-26/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 7f89bad our printer handling produces low quality images, the reason for that is the we first render with pdfium to bitmap which is fixed to twice size of pdf document in points, then it is downscaled/upscaled by qpainter. This issue is even more visible when print preview is requested on hdpi screen. Simplify the code and do the "scaling" already when rendering bitmap with pdfium. Task-number: QTBUG-75092 Fixes: QTBUG-78161 Change-Id: I616ad1f371e7d3457a04b0a254603ed235c387bc Reviewed-by: Michael Brüning <michael.bruning@qt.io>
| * Reuse action for back, forward, reload web actionsMichal Klocek2019-09-261-6/+3
| | | | | | | | | | | | | | | | | | Until now back, forward, reload web action where created for context menu and bind to current webview. This change makes the binding to page instead. Change-Id: Id27db4a110e624f6ea916f31f529c21caa35668b Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* | Deprecate QWebEngineDownloadItem path API properlyTamas Zakor2019-11-051-2/+6
| | | | | | | | | | | | | | | | Implements suggestion from 5.14 API review: - Replace QT_DEPRECATED with QT_DEPRECATED_SINCE and QT_DEPRECATED_VERSION_X Change-Id: I4d0bf8a2b535c44b5749cbd3bbab7e305bd137c6 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge remote-tracking branch 'origin/5.13' into 5.14Allan Sandfeld Jensen2019-10-221-6/+3
| | | | | | | | | | | | | | | | | | | | | | Conflicts: examples/webengine/minimal/main.cpp src/3rdparty src/core/net/url_request_custom_job.cpp tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp Change-Id: I33994024a4be5ed787800c5718a0a443b970c36d Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* | Rename certificate error's chain API methodKirill Burtsev2019-10-172-5/+5
| | | | | | | | | | | | | | | | Address API review and make the name to be consistent with other methods like localCertificateChain and peerCertificateChain of QSslCertificate Change-Id: I4f115846965d31ea9a20df3b7a27c6c041c52768 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | Adaptations for Chromium 77Allan Sandfeld Jensen2019-10-111-2/+2
| | | | | | | | | | | | Fixes: QTBUG-77267 Change-Id: I181e24cf80ebee6991b95dde6c636f0d169b40a4 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | Move lifecycle docs to features pageJüri Valdmann2019-10-101-3/+3
| | | | | | | | | | | | | | Also fix incorrect \since versions in QML API docs. Change-Id: I87b5899d4a55832dca2cd251aeb681e4bb2de2a2 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Improve Q(Quick)WebEngineDownloadItem APITamas Zakor2019-10-072-4/+4
| | | | | | | | | | | | | | | | | | | | Implements suggestions from 5.14 API review: - Replace QString with const QString & - Extend documentation Change-Id: I08365767128aa72bc7ef2356c761c2abe512e4eb Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Mark new QWebEngineCertificateError methods with '\since' tagv5.14.0-beta1Kirill Burtsev2019-10-011-2/+14
| | | | | | | | | | | | Change-Id: Idf6c6448e8c8979dccd507b1ae131dc386161e94 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Merge remote-tracking branch 'origin/5.13' into 5.14Allan Sandfeld Jensen2019-09-246-15/+24
|\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: config.tests/glibc/glibc.cpp src/3rdparty src/core/configure.json src/core/profile_io_data_qt.cpp src/webengine/configure.json src/webenginewidgets/api/qwebenginepage.cpp tests/auto/widgets/qwebenginepage/BLACKLIST Change-Id: I3e1781048c3cb09bfbf7427dfc5dd1fec11a2b97
| * Merge remote-tracking branch 'origin/5.12' into 5.13Liang Qi2019-09-121-4/+2
| |\ | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty Change-Id: Ib1202bcce587f9614013105c6a836344c1727cb7
| | * Reject certificate error for non-overridable errorsKirill Burtsev2019-08-291-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On certificate validation error page load is just halted meaning that no progress or load result are reported and no default error page for certificate errors is shown. Even though documentation states that 'By default, an invalid certificate will be automatically rejected' and that aligns with default implementation of certificateError method within Page and non-deferred errors in quick View, page or view silently stays in an intermediate state for non-overridable errors. Fix this inconsistent behavior by automatically rejecting certificate for every invalid case (non-overridable error, not deferred or not implemented overridable method). Change-Id: Id1cee2ee5cc45bdcb5f262a6c99c84274e6ca374 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
| | * Fix reporting overridable flag for QML WebEngineCertificateError typeKirill Burtsev2019-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Also remove confusion inside CertificateErrorController constructor and overridable method by matching documentation for AllowCertificateError method of ContentBrowserClient api. Change-Id: I7e10ef71a4429dcf5acc4b714a8a45f67a2ec684 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
| * | Fix QWebEnginePage visibility stateJüri Valdmann2019-08-202-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling view.show(); view.load(...); view.hide(); results in a WebContents in visible state because the first call to show() is delayed via a timer and never canceled so it takes effect after the hide(). Also, the page's visibility state is not updated when changing views, so that a visible QWebEngineView can be set to display a hidden QWebEnginePage. Fixes: QTBUG-77209 Change-Id: I0243c659f4039a35c36e04ea55c5972666170fd0 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Liang Qi2019-08-115-11/+19
| |\| | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty Change-Id: I64b46801bbaac4e96e32fece30f24f1d6cfc97a4
| | * Fix tooltip text wrappingTamas Zakor2019-07-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Also set the hiding delay to a reasonable time. Fixes: QTBUG-76122 Change-Id: Id971edbd9fb87cc96df53f73f2e7c61bde5855ef Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| | * Doc: Edit docs on script injectionLeena Miettinen2019-07-225-10/+18
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-76489 Change-Id: If489ebed802d273b0015bc6cfc190d948c4896e3 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
| * | Fix compilation with C++20Marc Mutz2019-07-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Implicit capture of this in [=] is deprecated. Fix by using explicit captures. Change-Id: Ia4344c4a15669f5076ad848626278a57cbe6767a Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Fix Q(Quick)WebEngineDownloadItem::setPath() path conversionTamas Zakor2019-09-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Also extend auto test with path checking Task-number: QTBUG-78213 Change-Id: Icb5d4ec831d8a665894d5890f983752c3af60ce8 Reviewed-by: Florian Bruhin <qt-project.org@the-compiler.org> Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | | Remove usages of deprecated APIsSona Kurazyan2019-09-094-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Replaced the following deprecated APIs: QWebEngineProfile::setRequestInterceptor -> QWebEngineProfile::setUrlRequestInterceptor QWebEngineSettings::globalSettings -> WebEngineSettings::defaultSettings QLayout::setMargin -> QLayout::setContentsMargins QWheelEvent::{x, y} -> QWheelEvent::position QWheelEvent::{globalX, globalY} -> QWheelEvent::globalPosition QSysInfo::windowsVersion -> QOperatingSystemVersion::current Qt::InputMethodQuery::ImMicroFocus -> Qt::InputMethodQuery::ImCursorRectangle QDesktopWidget::screenGeometry -> QGuiApplication::primaryScreen::geometry QTime -> QElapsedTimer - Fixed the tests to compile when deprecated APIs are disabled. - Replaced the doc references to deprecated APIs with the new ones. Made the docs for deprecated APIs compile conditionally, based on deprecation version. Task-number: QTBUG-76491 Change-Id: I5c6b7c628957deb9163f0bd2b6bc31bde1c7daec Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Api to get certificate's chain on errorKirill Burtsev2019-09-052-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Expose certificate's chain on validation error starting with the immediate certificate and ending with the CA's certificate. [ChangeLog][QtWebEngineWidgets][QWebEngineCertificateError] New method to get the peer's chain of digital certificates. Fixes: QTBUG-51176 Change-Id: I799dfe9e44f9f2517f4691d175beee256114af79 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | | Allow deferring QWebEngineCertificateError handlingKirill Burtsev2019-09-055-14/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce defer() method for halting URL load on certificate errors, and methods for rejecting and ignoring these errors subsequently in async manner. [ChangeLog][QtWebEngineWidgets][QWebEngineCertificateError] New methods for asynchronous decision on certificate error during load. Fixes: QTBUG-55110 Change-Id: Ib23eb568862ccc360208922a6a581f8e7edc4a7e Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | | Merge dev into 5.14 (delayed final downmerge)Kari Oikarinen2019-09-044-17/+32
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | This replicates the effects of the fast-forward merge that should have been pushed on 2019-08-27 as the final down-merge from dev to 5.14. Task-number: QTBUG-78019 Change-Id: I89e81a2d285e57eaf29e8cfef4abaf458b352c3b
| * | | Introduce findTextFinished signalPeter Varga2019-08-234-0/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a replacement for the callbacks. Also introduces QWebEngineFindTextResult class what is common for the Quick and Widget APIs. This makes possible to provide extra information about the match, eg. the number of matches and the index of the currently highlighted match. [ChangeLog][QtWebEngine][WebEngineView] Introduces findTextFinished signal and FindTextResult type to provide extra information about the result of a text search. [ChangeLog][QtWebEngineWidgets][QWebEnginePage] Introduces findTextFinished signal and QWebEngineFindTextResult class to provide extra information about the result of a text search. Task-number: QTBUG-50420 Change-Id: Icb9737d2f596e6bc0fc5733144eeeaf2a77aab02 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
| * | | Refactor findText handlingPeter Varga2019-08-222-17/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Move most of the findText logic to the QtWebEngineCore::FindTextHelper class. This change also separates findText callbacks in the new class for getting rid of the request ID conversion and make it easier to remove them in Qt6. Task-number: QTBUG-50420 Change-Id: I348cedd0f90a49f9b360165c46319aeed2c236c0 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* | | | Doc: Mark QWebEngineDownloadItem::setPath() obsoleteLeena Miettinen2019-08-301-6/+15
|/ / / | | | | | | | | | | | | | | | | | | | | | Mention the functions that replace the obsolete path() and setPath() functions and fix QDoc issues in their docs. Change-Id: I3497113760386e54e397bbe9c2149c355c22a3ec Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* | | Add webenginewidgets to configure systemMichal Klocek2019-08-121-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | Make webeninge-qml webengine-widgets features indpendent of webenginecore. Change-Id: I11c1bfaf4a15e4cb3acf2751b367f2c92a7ac833 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devAllan Sandfeld Jensen2019-07-241-9/+3
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty src/core/core_chromium.pri tests/auto/quick/qmltests/BLACKLIST tests/auto/quick/qquickwebengineview/BLACKLIST tests/auto/widgets/qwebenginepage/BLACKLIST tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp tests/auto/widgets/qwebengineview/BLACKLIST Change-Id: I11b26f5eebde29c4c62247b90e11e3ae40789fe4
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Allan Sandfeld Jensen2019-07-101-9/+3
| |\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf tests/auto/quick/qmltests/BLACKLIST tests/auto/quick/qquickwebengineview/BLACKLIST Change-Id: I29b68dec8692d0369a2dda56350ee62d3ad73e08
| | * Fully setup replaced QMouseDblClickEvent with source and flagsKirill Burtsev2019-07-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Not fully preserving properties causes event to not be considered synthesized by system and be forwarded into chromium. Receiving one single press event and no release event confuses input event_handler and triggers infinite loop and renderer process crash for pages with multiple nested iframes. Fixes: QTBUG-62106 Change-Id: Iabb8bff78fc3475923b4aa3209b720453a5b6ce5 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
| | * Do not forward key-events on QQuickItem levelAllan Sandfeld Jensen2019-06-141-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We forward the real events earlier, anything coming in at QQuickItem level is synthetic. Fixes: QTBUG-76268 Change-Id: I067f8f94cc5e07bb0cd500b5ae9b9d6bbe66310b Reviewed-by: Michal Klocek <michal.klocek@qt.io>
| | * Accept handled eventsAllan Sandfeld Jensen2019-06-141-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | If we let tablet events pass through without handling it, it will come back to haunt us as a mouse event. Fixes: QTBUG-76347 Change-Id: I93297f543620350db0329fe993d18a04e33c7d18 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* | | Remove usage of QSGInternalImageNodeAlexandru Croitor2019-07-232-7/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 1f01b44d20471a7f4a5029a4c0049e8296749fef landed in qtdeclarative, the internal API createInternalImageNode() takes one required argument. However due to the following commit in qtdeclarative cf24651b550752fbf9bd3afb02aee5d722164658 we no longer need to use internal image nodes. Remove their usage, and use the regular image nodes instead. Change-Id: Ie0cc2a2c1e365bb7fae564ad3c9d880c3a0bf0d9 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Adaptations for Chromium 75Allan Sandfeld Jensen2019-07-102-6/+6
| | | | | | | | | | | | | | | Change-Id: Idad08244e0c749a9f70f5eb9f8cd236039b941b3 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | | Disable Cut/Copy/Unselect actions when there's no selectionJüri Valdmann2019-07-081-2/+7
| | | | | | | | | | | | | | | | | | Fixes: QTBUG-76666 Change-Id: I74b9a26cd7be9a830f4eecd36db69777412ab316 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | | Add API to change download directory path and file nameTamas Zakor2019-07-054-11/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add functions and property to change the download directory and file name in QWebEngineDownloadItem and QQuickWebEngineDownloadItem and deprecate the path() and setPath(). Regenerating the uniquifying download filename after change the download directory. [ChangeLog][DownloadItem] Add functions and property to change the download directory and file name in QWebEngineDownloadItem and QQuickWebEngineDownloadItem and deprecate the path() and setPath(). Task-number: QTBUG-56978 Change-Id: I6e63da82a187add8bc3206cc80c8bf6865fbdd35 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Merge remote-tracking branch 'origin/5.13' into devJüri Valdmann2019-07-025-14/+66
|\| | | | | | | | | | | Change-Id: I806417dd7a6d2594a86ee49feedc4ad9ee48add2
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Allan Sandfeld Jensen2019-06-114-5/+35
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/3rdparty src/core/configure.json src/core/profile_io_data_qt.cpp tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp Change-Id: Ie8ae4aa03881a0733ff497fff46e3f7040735650
| | * Doc: Improve documentation for QWebEngineView::setHtml()Leena Miettinen2019-06-071-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ...and QWebEngineView::setContent()and WebEngineView.loadHtml() The baseUrl cannot be empty. Fixes: QTBUG-75760 Change-Id: If276767ed6a7a9421292299e0ac79d02bbbca0e3 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
| | * Disable edit actions when content has no focused framePeter Varga2019-05-273-3/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-75505 Change-Id: Ia1329ff554a86e307aa7995e9af1665ea6c5e64c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| * | Workaround for CSS orientation issuesSzabolcs David2019-06-041-9/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Web content can define its orientation for printing using the @page rule in CSS. This creates some edge cases, for example when the pages are not uniform and some of them has different orientation than the others. The current version of desktop Chromium can't handle this perfectly: sometimes it renders portrait pages to landscape papers by cutting down the extra parts. This patch makes our result similar to Chromium's - by ignoring the user's orientation settings in QPrinter. Task-number: QTBUG-75092 Change-Id: Ifaea69c94b6ee1b6a83609cb15207a58554975f9 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Merge "Merge remote-tracking branch 'origin/5.13' into dev"Allan Sandfeld Jensen2019-05-272-0/+16
|\ \ \
| * | | Merge remote-tracking branch 'origin/5.13' into devAllan Sandfeld Jensen2019-05-272-0/+16
| |\| | | | | | | | | | | | | | Change-Id: I70917458ba43c8fbf27fee2382eee42618588fe4
| | * | Merge remote-tracking branch 'origin/5.12' into 5.13Allan Sandfeld Jensen2019-05-242-0/+16
| | |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty src/core/net/network_delegate_qt.cpp tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp Change-Id: Ib715b3047213583e0441b915d3cabb801d9d4ba8
| | | * Add path validation for QWebEngineDownloadItem::setPath()Tamas Zakor2019-05-201-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Do not set path if it ends with separator or if it matches with an already existing directory name. Task-number: QTBUG-75566 Change-Id: I4b78b28afe034c7589633c569a4945a36b32008e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| | | * Update docs and test for runJavaScriptJüri Valdmann2019-05-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes: QTBUG-69567 Change-Id: Icdf5a200f7be1eb7a98cce62848e3a641c49e804 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | | | Implement page lifecycle APIJüri Valdmann2019-05-245-34/+187
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QtWebEngine][WebEngineView] WebEngineView now supports lifecycle states that can be used for reducing CPU and memory consumption of invisible views. [ChangeLog][QtWebEngineWidgets][QWebEnginePage] QWebEnginePage now supports lifecycle states that can be used for reducing CPU and memory consumption of invisible pages. Fixes: QTBUG-74166 Fixes: QTBUG-55079 Change-Id: I7d70c85dc995bd17c9fe91385a8e2750dbc0a627 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | | Merge "Merge remote-tracking branch 'origin/5.13' into dev" into ↵Allan Sandfeld Jensen2019-05-173-19/+44
|\ \ \ | | | | | | | | | | | | refs/staging/dev