summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
| * Fix: Delete objects even when no transport is availableLutz Schönemann2014-12-021-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | The issue is that objects that get deleted will not be removed from the internal lists. This patch checks for destroyed signals in cases when no transport is available (no connection established). cherry picked from commit 037c67962de3d74669c55a9db456ffd38a28480f Change-Id: I24e345dcbfe88e15031d288eb65abb2c3066d4c0 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
| * Make objects inside properties accessible.Milian Wolff2014-12-023-35/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Similar to the support for factory-methods, we must wrap objects in properties to make them accessible to clients. This patch adds the required code for that. Besides support for simple properties that reference an object, this patch also adds support for list properties that contain objects. The client-side unwrap of properties is delayed until all objects are initialized, as a property might reference another registered object. Change-Id: I9fb90a8eab4c66d2f4231fdb482e0d97d128df3e Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Make the tests less flaky and don't send empty property updates.Milian Wolff2015-01-161-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tests have been flaky on the CI. And indeed, running the tests locally under valgrind, which heavily influences the timings, I could reproduce failures on my local machine as well. The failure was due to multiple things, but most notably boils down to intermittend property update noficiations. To reduce that, the myFactory.lastObj property is propagated up. This way, any change to that property won't be propagated to the clients and influence the test. Furthermore, the failing tests are hardened by also checking the server messages, which is crucial to correct the flow of messages. Finally, a bug was found, where an empty property change could be broadcasted to all clients, when only a specific client's object got its properties changed. This is also fixed by this patch now. Change-Id: I2c7ba53253e2841db1a290872dacb097a7b984cf Reviewed-by: Bernd Lamecker <bernd.lamecker@basyskom.com> Reviewed-by: Risto Avila <risto.avila@theqtcompany.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Do not broadcast signals or property changes of wrapped qobjectsBernd Lamecker2014-12-192-27/+76
| | | | | | | | | | | | | | | | | | | | | | Signals and property changes caused by dynamically created qobjects (qobjects returned from a method call at runtime) should not be broadcasted to any client but only sent to clients which know these qobjects. Also added testcases for the changes. Change-Id: I9aacfa9e7e9df9314b44c6ba8e7339a2069e3c37 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Separate registered and autoregistered QObjectsSumedha Widyadharma2014-12-152-24/+39
| | | | | | | | | | | | | | | | | | | | | | Currently, a new client gets a list of _all_ registered QObjects, whether they were explicitly registered or not. This leaks internal information which the clients cannot use right away anyway. Change-Id: I4b25a731e9bc2d646f903057b409aecd34dc7f11 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Do not broadcast initialization data to all clients.Milian Wolff2014-12-083-51/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | Instead, send the data as a response to the initialization request message. This simplifies the code and makes it more predictable, as we do not spam all clients with initialization broadcasts anymore. Note that the pending initialization "feature" is removed, but I don't see a need for it anymore. If you want to delay client initialization, do it on the client side. Change-Id: I1ab71fd6c9e809ccb6085f1a3fbac3eb9b2e910b Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* | Merge remote-tracking branch 'origin/5.4' into devFrederik Gladhorn2014-10-203-21/+6
|\ \ | |/ | | | | | | | | | | Conflicts: examples/webchannel/webchannel.pro Change-Id: Ia768202d177a24ae90358b5d88621a5fa88f9002
| * Remove obsolete conversion work-around.5.4.0Milian Wolff2014-10-172-19/+1
| | | | | | | | | | | | | | | | | | The conversion from QJSValue to QJsonArray seems to work just fine with Qt 5.4. Originally, this work-around was introduced to fix the QML tests, which still pass without this code now. Change-Id: Id52a5a16ebe25914f01d597778152e0595c9f1f4 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Never manually connect to the destroyed signal of any object.Milian Wolff2014-10-171-1/+2
| | | | | | | | | | | | | | | | | | | | The web channel always connects to that signal automatically for internal book-keeping purposes. Thus we do not have to connect to the signal for wrapped objects. This simplifies the tests and reduces the IPC traffic for wrapped objects. Change-Id: Iaf8d9ce0b87874917cdcdf9013e21a53ee36b53a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
| * Minor optimization: Do not send list of empty enums.Milian Wolff2014-10-171-1/+3
| | | | | | | | | | Change-Id: I1358cab3e60158b7b21b38907f872a0a7a007e71 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Merge remote-tracking branch 'origin/5.4' into devFrederik Gladhorn2014-10-091-0/+1
|\ \ | |/ | | | | Change-Id: I7179dcfb603cb01a62b66d0860fb57f9ef98d6d8
| * Fix static builds and building of testsSimon Hausmann2014-10-041-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For static linkage we need to explicitly reference the plugin factory class, to prevent the linker from discarding the symbol. The Qt build system takes care of generating the necessary code for referencing the symbol and linking that reference into the application - see also qt.prf. For the build system to do this automatically, it needs to know the class name, which is stored in the qmldir file. This patch adds the missing class name. The first failure for this was when building the tests/auto/qml test, which specifies an IMPORTPATH that causes the qml import scanner to find the erroneous qmldir file and error out (see qt.prf). However otherwise this error would've appeared when trying to link an app on say iOS for example. Change-Id: Ia28307593e651d038ff1daaea7597f6eb5e40eb1 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Fix: Delete objects even when no transport is availableLutz Schönemann2014-10-061-0/+2
|/ | | | | | | | | | The issue is that objects that get deleted will not be removed from the internal lists. This patch checks for destroyed signals in cases when no transport is available (no connection established). Change-Id: I384b9e9dc280887d41bbfa59476400e9d8b1199b Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Update license headers and add new licensesJani Heikkinen2014-08-2617-306/+170
| | | | | | | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Furthermore we need to update the sync.profile to not point to the dev branch in order to integrate this patch in the CI. Change-Id: I06b5496b5d865e2da4808532362616429c969658 Reviewed-by: Sergio Ahumada <sahumada@blackberry.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Get rid of setTimeout calls in qwebchannel.js client code.Milian Wolff2014-08-261-2/+2
| | | | | | | | | | | | This was a historic artefact which should not be required anymore. Back then it was added when trying to improve the perceived performance of the webchannel on an embedded device. Nowadays, using the built-in WebKit IPC mechanism instead of WebSockets, paired with the rest of the code cleanup and other changes, it should not be required anymore. Change-Id: I4b2d76d84aaf92e12592a0b2bcf94710b697846e Reviewed-by: Lutz Schönemann <lutz.schoenemann@basyskom.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Doc: Edited links JavaScript API page and other documentation fixes.Jerome Pasion2014-08-233-9/+10
| | | | | | | | | The JavaScript API page is important to the rest of the documentation but there was no link to it. Task-number: QTBUG-40756 Change-Id: Id741a67ac2b57e21da548c2961c622c7516ac8cf Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Add extensions used by example files to .qdocconfTopi Reinio2014-08-211-0/+1
| | | | | | | | | | | As the examples include files with extension that are not included in the global Qt documentation config, add them to the module's .qdocconf to get the files listed in the example documentation pages. Change-Id: Ifc3bf473b67d6acc795ce3f951f0c5269d69b69c Task-number: QTBUG-40831 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fixing property update for wrapped objectsLutz Schönemann2014-08-191-2/+3
| | | | | | | | | Returned QObject pointer got wrapped correctly but a wrong QJsonObject was given to initializePropertyUpdates() method. Change-Id: I157b862ba2a90e87c295beb3c02fff932aac83c6 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Remove the extra semi-colonsThiago Macieira2014-08-182-4/+4
| | | | | | | qwebchannel.h:60:101: error: extra ‘;’ [-Wpedantic] Change-Id: I7623b68ace59431266ca6a48bfa23bc306363e7e Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Enabled linking to qtdoc.Jerome Pasion2014-08-181-1/+1
| | | | | | | | | -added 'qtdoc' to the depends variables in qtwebchannel.qdocconf file Task-number: QTBUG-40756 Change-Id: Ida3e1aa1237bcd91f0280d1969c2361f4ee70405 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Remove unused #include statementSumedha Widyadharma2014-08-131-1/+0
| | | | | Change-Id: Ic51555b34823354092a5a4e8583c51d50a1aded8 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Fix example documentation and pathsTopi Reinio2014-08-134-6/+56
| | | | | | | | | | | | | | | To fix issues related to example documentation and to follow Qt convention, do the following changes: - Rename examples/qwebchannel to examples/webchannel - Move example-specific documentation to correct location(s) - Include generic 'Running the Example' instructions - Add the module name to example title, fix links This ensures that example docs are built and the example manifest file generated correctly. Change-Id: I284e0b13db95a6738d72258735018b59156cc7da Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fixing idlestate if used with synchronous transportLutz Schönemann2014-08-121-1/+1
| | | | | | | | | | | | If QtWebChannel is used with a synchronous transport it can happen that the clients idle state is wrong because the clients idle message is received before the idle state is set to 'false'. This patch changes the order of setting the idle state and broadcasting the property update message to avoid that problem. Change-Id: I7762b5279febb99d3cb2e110ec9306596fc71e14 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Call unwrapQObject for every response we getLutz Schönemann2014-08-081-3/+7
| | | | | | | | | | | | The JS lib will miss to add QObjects to the local object descriptions when receiving a new description and the user has not registered a callback function. This patch makes the lib execute unwrapQObject for all responses received from a function call. Change-Id: I72d872d65a7e7bec1d7e6ffb1eea674d0f6e50d7 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fixup documentation issues.Milian Wolff2014-08-044-6/+6
| | | | | | | | | These issues were raised by Sze Howe Koh in code review 89965 of change I259c204e. This change set does not yet include any comparison to the old Qt WebKit bridging functionality. I'll hand this in later. Change-Id: Idc7df0e02bfcda3c3fcf1a4e147c1dfac4f18a64 Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com>
* Use UUIDs to identify wrapped objectsLutz Schönemann2014-08-031-7/+2
| | | | | | | | | | | | | | | | | Instead of using stringified pointers to identify objects this patch creates UUIDs (version 4) for every object that get's wrapped by QMetaObjectPublisher Especially when using QtWebChannel to publish an interface to the network it comes to the point that you don't want to publish internal memory addresses Change-Id: I7e3fec7497d63572cfba72a5dacc10542aef415c Reviewed-by: Sumedha Widyadharma <sumedha.widyadharma@basyskom.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com> Reviewed-by: Michael Bruning <michael.bruning@digia.com>
* Properly disconnect a transport from the QtMetaObjectPublisher.Milian Wolff2014-08-012-1/+7
| | | | | | | | | | | | | | This fixes a bug, where messages from the transport would still be send to the QtMetaObjectPublisher even though it was previously disconnected. I'll refactor this code eventually to get rid of QtMetaObjectPublisher alltogether and merge its code into QWebChannelPrivate where appropriate. Change-Id: Ie0c35bd81a5e633bdcb6be55b64f947d4a545a59 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Lutz Schönemann <lutz.schoenemann@basyskom.com>
* Add documentation for the QtWebChannel module.Milian Wolff2014-08-0111-26/+498
| | | | | | | | | | | Please proof-read it and tell me what needs to be improved. I assume most people will probably not use the QWebChannel directly. Rather, they will only consume its features indirectly through the integration in QtWebKit/QtWebEngine. Thus the documentation here is for QWebChannel as a library. User-end documentation should be added to QtWebKit, I think. Change-Id: I259c204e24331271b8dc74ea11695988234a79d3 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* Refactor JavaScript QWebChannel to take an external transport object.Milian Wolff2014-07-301-33/+13
| | | | | | | | | | | This assimilates the JavaScript side to the QML/C++ side. We get rid of the automagic WebSocket code. Instead, users pass in the WebSocket from the outside, if they want to use that for communication. In the QtWebKit/QtWebEngine cases, we will pass in our custom IPC objects. Change-Id: I15e15b5130f99dc8b39dfbfa8cd3d8b2d34dbbc0 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com> Reviewed-by: Lutz Schönemann <lutz.schoenemann@basyskom.com>
* Refactor and streamline API and IPC protocol.Milian Wolff2014-07-298-237/+198
| | | | | | | | | | | | | | | This patch removes the obsolete API support to send raw messages using a QWebChannel. Instead, it is encouraged to directly use WebSockets or navigator.qt. By doing so, we can cleanup the code considerably. While at it, the transport API is adapted to work on QJsonObject messages, instead of QStrings. This will allow us to use more efficient formats in e.g. QtWebKit or QtWebEngine. One could also implement a JSONRPC interface using a custom transport then. Change-Id: Ia8c125a5558507b3cbecf128a46b19fdb013f47b Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
* added module.export for use with nodejsBernd Lamecker2014-07-291-0/+7
| | | | | | | | The module.export allows qwebchannel.js being included and used from within a nodejs environment. Change-Id: I3db6ba85e8d3406031c0262815e50aca0f214ace Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fix compile warning with clang.Milian Wolff2014-07-281-1/+1
| | | | | | | | QWebChannelPrivate was declared as struct, even though it is defined as class later on. Clang emits a warning in such cases. Change-Id: Ia5988d229d41f02493035e2502955e92079f2baf Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fix wrong include of qwebchannelglobal.h.Milian Wolff2014-07-281-1/+1
| | | | | Change-Id: I700f1e1d6508dd4d861bec4f5aa15b666d6eecc0 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Use defineProperty instead of __define[SG]etter__Sumedha Widyadharma2014-07-271-20/+22
| | | | | | | | | | __define[SG]etter__ are non-standard. Object.defineProperty is the standard way to do this. See also: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ Change-Id: If58e420fe84ef2fbb005838955fabf9d96f225b0 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Adapt to rename to QtWebChannel and rename resource path as well.Milian Wolff2014-07-171-1/+1
| | | | | | | | | | This is a minor cleanup commit. Renaming the .pro file is required for qt.pro to find it. The rename of the resource path makes it more explicit by using the module name. Change-Id: Ib724882d02d2a8aea7468ef984ed573dca1d3e7b Reviewed-by: Michael Bruning <michael.bruning@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Make the QWebChannel QML API publically accessible.Milian Wolff2014-07-1512-115/+158
| | | | | | | | | | This is required for proper QtWebKit/QtWebEngine integration, as otherwise these modules would have to redo a lot of the QtWebChannel QML API. Furthermore, without this, we could not use the WebChannel.id attached property everywhere, independent of the web browser technology. Change-Id: I032a9326841d505c2f77959a240bbfc71e94b6e8 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Make the registered objects of a QWebChannel accessible.Milian Wolff2014-07-052-0/+6
| | | | | | | This is useful for integration into QtWebKit. Change-Id: I80d79c0ed8a627d62ee45090d7bceca22fdf56ce Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Do not link against QtNetWork.Milian Wolff2014-07-041-1/+1
| | | | | | | It is not required anymore. Change-Id: Ifb76ed515193591a09a81b73edee12703d16d04c Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Only depend optionally on QtWebSockets, and only use it in the example.Milian Wolff2014-07-043-152/+3
| | | | | | | | | | | | | The utility QWebChannelAbstractTransport implementation based on the QtWebSocket has no big value. Instead, it would pull in the QtWebSocket link-time dependency into QtWebKit/QtWebEngine, which is not desired. Considering that the WebSocket usecase is minor, and only few people will ever use it, we agreed that having the code in the example alone is enough. Change-Id: Ica038329a1d684f33e805fc296e9dff71b1446ba Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Refactor code to use QWebChannelAbstractTransport and QtWebSockets.Milian Wolff2014-07-0418-603/+186
| | | | | | | | | | | | | | | | | | | | | | This is a quite big changeset, but necessary to get the roadmap implemented that was discussed at QtCS. With this patchset landed, the QWebChannel does not depend on QtWebKit anymore, not even for the tests. Rather, we will introduce the dependency in the other way (i.e. QtWebKit will optionally use QtWebChannel if available). For the pure Qt/C++ use-case, we ship a utility implementation of a QWebChannelAbstractTransport that uses a QWebSocket for the server-client communication. This way, we can get rid of the custom WebSocket implementation. The tests are refactored to run the qwebchannel.js code directly inside QML. Integration tests for QtWebKit/QtWebEngine as well as examples will be added to these repositories. Change-Id: Icc1c1c5918ec46e31d5070937c14c4ca25a3e2d6 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Do not return a function for property getters on the HTML side.Milian Wolff2014-07-031-17/+6
| | | | | | | | | This simplifies the usage and lets properties be used just like normal JavaScript properties. This is possible since the properties are cached on the HTML side. Change-Id: Ic60076f4596cd8df063567dfbd630e5bd6403119 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Fix public headers for use with QT_NO_KEYWORDSPierre Rossi2014-06-266-9/+9
| | | | | | | | | QtWebEngineCore has to build that way, so we better make sure the two can play nicely together. Change-Id: Ibab5a2d042b3c8ea230922aeca6768ffec2ca452 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Send response data only to target client.Milian Wolff2014-03-2112-86/+82
| | | | | | | | | | | | | | Before, the response was sent to all clients in a broad-cast and had to be filtered on the client-side. This required additional client identification data to be added to all requests and responses. Now, we keep track of the transport and transport-internal client and only send the response to that client. This is very benefitial for multi-client setups but also reduces traffic for single-client setups and thus their performance. Change-Id: Ia1ef5e031b0058222083d352a8aa28a7d566a6ca Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Use an enum for message types instead of strings.Milian Wolff2014-03-212-31/+74
| | | | | | | | | | | This further reduces the network traffic and thus leads to a small performance boost. Personally, I also think this code is a bit nicer to read and grasp. Change-Id: I943c621142e9982f0e52d24e3a0976428856541b Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Merge QWebChannelSocket and QWebSocketTransport.Milian Wolff2014-03-215-162/+116
| | | | | | | | | The former was just the private implementation of the latter. This way, the code structure is more understandable to newcomers and follows existing best-practices. Change-Id: I07cf64370553f4c2de349b5f01e90b31112fee58 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix minor coding style issues.Milian Wolff2014-03-213-8/+8
| | | | | | | | Add space between type name and & or *. Change-Id: I64bfe20510cb43ee0a0b6e08bd433fc657e925a0 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Mark some constructor as explicitSergio Ahumada2014-03-193-3/+3
| | | | | | Change-Id: I92c5b00d5bbcc08a241ed0382c13b6bf2676ca6f Reviewed-by: Milian Wolff <milian.wolff@kdab.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Port code to QtWebSockets.Milian Wolff2014-03-067-616/+65
| | | | | | | | | | | | | This removes the custom WebSocket server implementation and replaces it by a dependency on the QtWebSockets module. Sadly, the QtWebSocket module does not yet support custom protocols. Also, there is quite some boiler plate code required, something which I want to simplify upstream in the QtWebSockets module later. Change-Id: I8066418fb1857d23b8593c443bc9a98ded917a99 Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
* Make the underlying transport mechanism of the webchannel pluggable.Milian Wolff2014-02-0619-109/+658
| | | | | | | | | | | | | | | | | | | | | This enables us to optionally use navigator.qt instead of a WebSocket, which is nicer setup-wise and is also slightly faster: navigator.qt: 284.0 msecs per iteration (total: 2,840, iterations: 10) WebSocket: 295.8 msecs per iteration (total: 2,959, iterations: 10) The baseline is ca. 203 msecs, which would mean a performance boost of ca. 12.7%. Furthermore, this sets the fundation to eventually add a WebEngine transport mechanism. The WebViewTransport should also be removed and instead the WebView itself should directly implement the WebChannelTransportInterface. Change-Id: I368bb27e38ffa2f17ffeb7f5ae695690f6f5ad21 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix clang warning about struct which was forward-declared as class.Milian Wolff2014-01-311-1/+1
| | | | | Change-Id: I7dc78213bc57cbfd63b021e00823c4aad105aa05 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>