summaryrefslogtreecommitdiffstats
path: root/src/3rdparty
Commit message (Collapse)AuthorAgeFilesLines
* Phonon: Fix use of ASCII casting in the PulseAudio support.Thiago Macieira2010-11-261-74/+72
|
* Phonon: Fix unused parameter warningThiago Macieira2010-11-261-1/+1
|
* Phonon: Fix warning on casting from "false" to QFlags.Thiago Macieira2010-11-261-2/+2
| | | | Instead, return Features();
* Phonon: Fix "value not in enum" warning with GCC 4.5.Thiago Macieira2010-11-261-1/+1
| | | | QMetaType::Float is not a member of QVariant::Type.
* Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into ↵Qt Continuous Integration System2010-11-251-5/+7
|\ | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Fix a missing error-signal when a server is shut down while downloading Ensure that if this is does not have a valid filter when on XP or less HTTP backend: fix build without Qt3 support QNetworkAccessManager: enable synchronous HTTP calls
| * Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into ↵Qt Continuous Integration System2010-11-241-5/+7
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Fix a missing error-signal when a server is shut down while downloading Ensure that if this is does not have a valid filter when on XP or less HTTP backend: fix build without Qt3 support QNetworkAccessManager: enable synchronous HTTP calls
| | * Ensure that if this is does not have a valid filter when on XP or lessAndy Shaw2010-11-241-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The renderer is only supported on Windows Vista or later so if we are on an earlier version of Windows then this should not be used. In addition this patch also ensures that it resets the filter if any of the needed functions fail. Task-number: QTBUG-13062 Reviewed-by: Thierry Bastian
* | | Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public into ↵Qt Continuous Integration System2010-11-243-19/+37
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.7-integration * '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (28 commits) Fixed tst_qwidget::winIdChangeEvent Use parent class function to generate Makefile headers in Symbian Fix spaces Fix QPixmap::fromImage() in the OpenVG pixmap backend. Native color dialog on symbian Fix non-stroked filled paths in OpenVG paint engine. Fix symbian-mmp.conf include path Fix a build break when namespace is defined Fixed namespace issues related to epocroot.cpp Corrected ASCII comparison and removed extra braces Add symbian scope for qfiledialog_symbian.cpp Resolve EPOCROOT in qt.conf using same logic as in .pro Make epocroot resolving compatible with more build environments Fix for QtOpenGL RVCT4 compilation error Removed extra cpp and done changes based on comments Correct flags for Symbian file dialogs Fix for WServ 64 crash on Symbian. Use include(original mkspec) instead of copying of mkspec to default Fixed code style of d92cbfc5, reported by git push. Switched qdesktopservices to use SchemeHandler for Symbian^3 and later. ...
| * | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/qt-s60-public into 4.7-s60axis2010-11-192-17/+35
| |\ \ | | | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
| | * | Fixed handling of QInputMethodEvents with nonzero replacementLength.axis2010-11-192-2/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These types of events replace text that is already in the widget, but WebKit did not check for replacementLength at all. RevBy: Janne Koskinen Task: QT-4303 Task: https://bugs.webkit.org/show_bug.cgi?id=49787 AutoTest: Included
| | * | Added qmake check for presence of RHttpDownloadMgr headerGareth Stockwell2010-10-083-7/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | downloadmgrclient.h is not found on S^4 baselines, causing a build failure. This commit is a temporary workaround, which disables progressive download support if the header is not found. The correct solution is to determine whether the RHttpDownloadMgr definition has moved, and if so, to modify the .pro file to include the new path. Task-number: QTBUG-10769 Reviewed-by: TrustMe
| | * | Progressive download in Phonon MMF backend: integrated with playerGareth Stockwell2010-10-088-43/+211
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit integrates the Download class with the media playback classes in the backend, to implement Progressive Download. Note that this PDL implementation has one drawback: when video playback is paused due to shortage of data (i.e. due to the download being temporarily stalled), the display goes black. This is because, when the end of the currently-downloaded data is reached, the playback session is closed. When more data becomes available, the clip is re-opened, a seek is done to reach the previous playback position, and playback is re-started. Closing the playback session closes the video stack's connection to the display, thereby causing the video widget to go black while more data is buffered. This is a consequence of the level in the native video stack at which the Phonon integration is done: managing a network stall without requiring the playback session to be closed would require integration below the MMF client API, specifically at the MMF controller level. Task-number: QTBUG-10769 Reviewed-by: Derick Hawcroft
| | * | Progressive download in Phonon MMF backend: added download managersGareth Stockwell2010-10-082-0/+305
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a Download class which uses the RHttpDownloadMgr API to download a media clip over HTTP. Task-number: QTBUG-10769 Reviewed-by: Derick Hawcroft
| | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-08-055-3/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( bbff6182e525fcf58dbc7426a1fbbf8f31588214 ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2010-08-05 David Leong <david.leong@nokia.com> Reviewed by Simon Hausmann. [Qt] Input mode states are not reset after entering a password field https://bugs.webkit.org/show_bug.cgi?id=43530 Input mode hints are not reset if clicking on password <input> elements then clicking on <textarea> elements * WebCoreSupport/EditorClientQt.cpp: (WebCore::EditorClientQt::setInputMethodState): * tests/qwebview/resources/input_types.html: * tests/qwebview/tst_qwebview.cpp: (tst_QWebView::focusInputTypes):
| | * | Fixed build break on Symbian versions earlier than S^3Gareth Stockwell2010-08-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following overload was added in S^3: TInt RApaLsSession::RecognizeData(const TDesC8& aBuffer, TDataRecognitionResult& aDataType) const In order to allow the backend to compile against earlier versions of the platform, this patch calls the RecognizeData overload which taking the same arguments as above, plus a filename (for which KNullDesC is passed). Task-number: QTBUG-6562 Reviewed-by: trustme
| | * | Added support to Phonon MMF backend for playback of Qt resource filesGareth Stockwell2010-08-023-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The backend accesses the resource file path via MediaSource::url(). A small patch to Phonon was required to enable this, because by default, Phonon passes a QIODevice, rather than the resource file path, to the backend. The backend uses this path to create a QResource object, through which the memory buffer into which the resource file has been read can be accessed. This buffer is wrapped in a Symbian 8-bit descriptor and passed to the OpenDesL() function of the appropriate MMF client utility API. Playback only works for certain file formats, as the Symbian MIME type recognizer does not always work. For example, playback of an audio WAV resource file works, while playback of an MP3 resource file does not. Task-number: QTBUG-6562 Reviewed-by: Justin McPherson
| | * | Added support to Phonon MMF backend for playback of Qt resource filesGareth Stockwell2010-08-0212-20/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The backend accesses the resource file path via MediaSource::url(). A small patch to Phonon was required to enable this, because by default, Phonon passes a QIODevice, rather than the resource file path, to the backend. The backend uses this path to create a QResource object, through which the memory buffer into which the resource file has been read can be accessed. This buffer is wrapped in a Symbian 8-bit descriptor and passed to the OpenDesL() function of the appropriate MMF client utility API. Task-number: QTBUG-6562
| | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-07-274-20/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( d521d7d81e8f0297c94be9ebd8af67ee130d0edb ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2010-07-27 Simon Hausmann <simon.hausmann@nokia.com> Reviewed by Tor Arne Vestbø. [Qt] Incorrect input method hints https://bugs.webkit.org/show_bug.cgi?id=43037 Properly set or reset all input method hints when activating input fields. * WebCoreSupport/EditorClientQt.cpp: (WebCore::EditorClientQt::setInputMethodState): * tests/qwebview/tst_qwebview.cpp: (tst_QWebView::focusInputTypes): Extended unit test to verify that we reset hints.
| | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-07-134-2/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( 038b62085831eef4dee423361c65ecd55b7b9b1d ) Changes in WebKit/qt since the last update: * backport: https://bugs.webkit.org/show_bug.cgi?id=30978 -- [Qt] ASSERT failure while running DRT
| | * | Use lower case for including system header filesGareth Stockwell2010-07-076-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All platform includes are now lower case, i.e. '#include <foobar.h>' rather than '#include <FooBar.h>'. Note that Qt includes are still camel case, e.g. '#include <QtGui/QWidget>' Task-number: QTBUG-6528 Reviewed-by: trustme
| | * | Added trace statements to Phonon MMF backendGareth Stockwell2010-07-071-0/+17
| | | | | | | | | | | | | | | | Reviewed-by: trustme
| | * | MMF Phonon backend: call winId() from VideoWidget constructorGareth Stockwell2010-07-072-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is to be consistent with the backends for other platforms, which also call QWidget::winId() on the VideoWidget (or one of its children) during construction. Reviewed-by: Thierry Bastian
| | * | Fixed crash which occurs when switching between video clipsGareth Stockwell2010-07-072-13/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When Phonon::MediaObject::setCurrentSource() is called when the MediaObject is connected to a Phonon::VideoWidget, the MMF::AbstractVideoOutput pointer is propagated inside the backend from the first MMF::AbstractVideoPlayer to the second. If the VideoWidget is subsquently re-sized, the code path enters the ScaleFactors branch of the MMF::SurfaceVideoPlayer::handleParametersChanged function. At this point, m_displayWindow is still set to the inital null value, and the assertion therefore fails. This change ensures that m_displayWindow is updated before attempting to apply the scale factor change. Task-number: QTBUG-11377 Reviewed-by: Thierry Bastian
| | * | Close media clip before creating new player objectGareth Stockwell2010-07-075-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Failure to Close() an existing MMF player utility object before creating a new one - which happens in the MMF backend's implementation of Phonon::MediaObject::setCurrentSource() - causes intialization of the newly-created utility to fail later on. Task-number: QTBUG-11377 Reviewed-by: Thierry Bastian
| | * | Enable bufferStatus signal during video clip loading on NGA platformsGareth Stockwell2010-07-072-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CVideoPlayerUtility::RegisterForVideoLoadingNotification() was only called in the DSA, not the NGA, variant of the Phonon MMF backend. Task-number: QTBUG-11378 Reviewed-by: Thierry Bastian
| | * | Prevent crash when video is played without a VideoWidgetGareth Stockwell2010-07-073-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Phonon API allows video to be played via a Phonon::MediaObject, even if no Phonon::VideoWidget has been connected to it. This patch prevents the Phonon MMF backend crashing in this scenario due to dereferencing a null pointer. Reviewed-by: Thierry Bastian
| | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-06-268-18/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( fc13f9b396e1448cd71266f56ba7a93de5cf6ed9 ) Changes in WebKit/qt since the last update: * Benjamin's update/fixes to the backport of https://bugs.webkit.org/show_bug.cgi?id=33150
| | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-251-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4b88f595ab62b7c5f703a286c4f5f13f8784a936 * Fix crash/regression in thai line word breaking when libthai is installed: Commit 4b88f595ab62b7c5f703a286c4f5f13f8784a936 upstream ensures the zero termination of the string passed to libthai.
| | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | a80fd59e3b3b18116803a14e6369345933994236 * Disable data structure packing with RVCT, as it appears that the compiler miscompiles the code.
| | * | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into ↵Qt Continuous Integration System2010-06-227-58/+74
| | |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to f0dcb906fe56b5dc06aa305b6cfc821d5dd25a28 Clean up HB_Anchor's DeviceTables on failure when loading format 3 Make sure ValueRecord's DeviceTables are cleaned up on failure Fix null HB_Device** dereference on exit in Harfbuzz GPOS code Prevent warnings about EPOCROOT coming out when not on symbian Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ab9a897b688e991a8405cf938dea9d6a2f1ac072 Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( be1a105be93d7fcbe36d93d0827dc6e98b55de0c )
| | | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-221-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f0dcb906fe56b5dc06aa305b6cfc821d5dd25a28 * Import f0dcb906fe56b5dc06aa305b6cfc821d5dd25a28 which fixes a crash with certain fonts.
| | | * | Clean up HB_Anchor's DeviceTables on failure when loading format 3Andreas Kling2010-06-221-1/+2
| | | | |
| | | * | Make sure ValueRecord's DeviceTables are cleaned up on failureAndreas Kling2010-06-221-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | Cleanup was a missing for the case where loading an X placement device table failed.
| | | * | Fix null HB_Device** dereference on exit in Harfbuzz GPOS codeAndreas Kling2010-06-214-17/+21
| | | | | | | | | | | | | | | | | | | | Fix incorrect usage of _HB_OPEN_Free_Device() in CaretValue cleanup
| | | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-203-33/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ab9a897b688e991a8405cf938dea9d6a2f1ac072 From Andreas Kling <andreas.kling@nokia.com>: * Unbreak _HB_OPEN_Get_Device() and Get_ValueRecord()
| | | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-06-203-1/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( be1a105be93d7fcbe36d93d0827dc6e98b55de0c ) Changes in WebKit/qt since the last update: * https://bugs.webkit.org/show_bug.cgi?id=40567 -- [Qt] QtWebKit crashes while initializing flash plugin 10.1.53.64.
| | * | | Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/qt-multimedia-staging ↵Justin McPherson2010-06-2217-101/+365
| | |\ \ \ | | | |/ / | | | | | | | | | | into 4.6
| | | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-182-17/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5699175f55acbdfa4ac95ab6c727ebd4a201f3a2 Author: Andreas Kling <andreas.kling@nokia.com> Date: Fri Jun 18 16:10:31 2010 +0200 Make HB_AnchorFormat3's Device tables a pointer array Saves sizeof(pointer) * 1 when the font doesn't have these tables. Cuts resident memory consumption by 40kB when loading qt.nokia.com in QtWebKit. Signed-off-by: Simon Hausmann <simon.hausmann@nokia.com>
| | | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-06-183-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( a13977ce2aba31808a046cddc082a84dc316d78b ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2010-06-18 Simon Hausmann <simon.hausmann@nokia.com> Reviewed by Antti Koivisto. REGRESSION(r60958) [Qt] qwebpage::inputMethods auto-test fails https://bugs.webkit.org/show_bug.cgi?id=40830 When activating a regular input method field, always set or unset the ImhHiddenText input method hint. * WebCoreSupport/EditorClientQt.cpp: (WebCore::EditorClientQt::setInputMethodState):
| | | * | Updated Harfbuzz from git+ssh://git.freedesktop.org/git/harfbuzz to ↵Simon Hausmann2010-06-183-55/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 508b02a252b524d34f3ed970eef3bdb6350a2b77 * Andreas' compression for HB_ValueRecord
| | | * | Re-enable data structure packing in Harfbuzz for RVCTSimon Hausmann2010-06-183-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Re-ordered some gpos structures and removed the packing from HB_ShaperItem as it's not worth it. Reviewed-by: Andreas Kling
| | | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-06-1812-14/+248
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( 85a48bdb52a81a9d18477a347fba5f6c930af416 ) Backported: * https://bugs.webkit.org/show_bug.cgi?id=37719 -- Some HTML5 Input tags not treated as needing an input method. * https://bugs.webkit.org/show_bug.cgi?id=40107 -- Impossible to set input method hints based HTML5 input types
| | * | | Phonon(qt7); Don't try and display video frames when audio only.Justin McPherson2010-06-221-7/+9
| | |/ / | | | | | | | | | | | | Task-number: QTBUG-9068
| | * | Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2010-06-163-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( aa3f786bdba4dc153620ae7f98e4b0e41770d1d1 ) Changes in WebKit/qt since the last update: * https://bugs.webkit.org/show_bug.cgi?id=34614 -- [Qt] npapi header leaves XP_WIN flag defined even when __SYMBIAN32__ flag is found
| * | | Merge remote branch 'qt/4.7' into 4.7Jason McDonald2010-11-1810-78/+0
| |\ \ \ | | | |/ | | |/| | | | | | | | | | | | | Conflicts: tools/qdoc3/test/qt-build-docs.qdocconf tools/qdoc3/test/qt.qdocconf
| * | | Bump Qt version to 4.7.2.Jason McDonald2010-11-121-2/+2
| | | | | | | | | | | | | | | | Reviewed-by: Trust Me
* | | | Ensure WebView press delay timer is cancelled when grab is taken.Martin Jones2010-11-232-0/+12
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | Flickable steals the grab, but the timer was not stopped and the keepGrab flag is set and the mouse grabbed. This means that the WebView now has the grab and subsequent clicks on another element are ignored. Task-number: QTBUG-15529 Reviewed-by: Joona Petrell
* | | Don't pack Harfbuzz structs, this causes unaligned access crashes.Andreas Kling2010-11-1210-78/+0
|/ / | | | | | | | | | | | | | | The memory-greediest structs have been reordered anyway, so the gain from forcibly packing them is mostly negligible. Task-number: QTBUG-13395 Reviewed-by: Thiago Macieira <thiago.macieira@nokia.com>
* | Fix Malayalam Rendering - 'Ra' is PreBaseJiang Jiang2010-11-021-1/+1
| | | | | | | | | | Task-number: QTBUG-1887 Reviewed-by: Lars Knoll
* | Phonon MMF backend: set _q_DummyWindowSurface property on VideoWidgetGareth Stockwell2010-10-261-0/+2
| | | | | | | | | | | | | | | | | | | | | | This prevents a window surface being created if Phonon::VideoWidget::setFullScreen(true) is called. Since Qt does not ever render any content to the native window in which video is displayed, creation of a surface for that window would consume memory unnecessarily. Task-number: MOBILITY-1315 Reviewed-by: Jason Barron