summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Properly disconnect a transport from the QtMetaObjectPublisher.Milian Wolff2014-08-014-1/+21
| | | | | | | | | | | | | | 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>
* Install missing index.html for standalone exampleSumedha Widyadharma2014-08-011-0/+2
| | | | | Change-Id: I908f06bdcea1dfa422cf70817df48cdb1d290690 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Add documentation for the QtWebChannel module.Milian Wolff2014-08-0125-85/+681
| | | | | | | | | | | 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-303-55/+51
| | | | | | | | | | | 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-2918-602/+499
| | | | | | | | | | | | | | | 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>
* Align .qmake.conf with other Qt modules.Milian Wolff2014-07-281-2/+2
| | | | | | | | This module will be shipped with Qt 5.4.0, so set the version accordingly. Furthermore, the warning_clean flag is added to CONFIG. Change-Id: Id8936dc496bf585f838842bcc29fff238523927b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.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>
* The standalone example depends on QtWidgetsSumedha Widyadharma2014-07-241-1/+1
| | | | | | | This fixes builds with Qt built without the widgets module. Change-Id: I280b1443c3333d9d199d0b4fe7ee43bffb9c5e6e Reviewed-by: Simo Fält <simo.falt@digia.com>
* Explicitly distinguish between JavaScript Client and QML Client.Milian Wolff2014-07-182-17/+17
| | | | | | | It worked before, but this patch makes the code more explicit. Change-Id: Id7cf90cb3e2488106e08077e9a8165112734dd88 Reviewed-by: Michael Bruning <michael.bruning@digia.com>
* Adapt to rename to QtWebChannel and rename resource path as well.Milian Wolff2014-07-177-6/+3
| | | | | | | | | | 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-1524-134/+316
| | | | | | | | | | 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-0410-85/+214
| | | | | | | | | | | | | 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-0447-1323/+662
| | | | | | | | | | | | | | | | | | | | | | 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-034-21/+10
| | | | | | | | | 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>
* Add cmake test, adapt test directory layout and point to dev branches.Milian Wolff2014-07-0327-11/+35
| | | | | | | | | | | The auto tests are now located in tests/auto instead of directly in tests/. This is required to ensure the cmake test is found. Furthermore, the sync.profile is updated to point to refs/heads/dev, as we target Qt 5.4 with this new module. Change-Id: I1e6e99968b7081b5774eaf30319cac1fbaed35c2 Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
* Add .tag file and fix .gitignoreSergio Ahumada2014-07-022-1/+1
| | | | | | | | | | | Do not ignore all .* files by default, if there is any file that should really be ignored then it should be added explicitly in the future. Change-Id: I94a6524d05d87745c8a197e1142a60bf70d17f16 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com> Reviewed-by: Sergio Ahumada <sahumada@blackberry.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-2116-118/+87
| | | | | | | | | | | | | | 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-215-45/+100
| | | | | | | | | | | 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>
* Refactor QML test code and add a test for multiple websocket clients.Milian Wolff2014-03-215-50/+234
| | | | | | | | | This will allow us to refactor the handling of multiple clients without breaking the functionality. Change-Id: I277eb5d7337d398fdf0694ef539d3b6ab7e5d332 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-068-618/+68
| | | | | | | | | | | | | 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>
* Change destruction order to fix crash on close.Milian Wolff2014-02-061-1/+1
| | | | | | | | The transport interface should outlive the web channel or unregister itself before being destroyed. Change-Id: I77eaa26a4e1985d83cc3f19d07830cf0ca48ee7c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Make the underlying transport mechanism of the webchannel pluggable.Milian Wolff2014-02-0638-179/+813
| | | | | | | | | | | | | | | | | | | | | 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>
* Update README and use markdown for nicer display on gitorious.Milian Wolff2014-02-062-60/+90
| | | | | | | This text can then be used in the future for proper qdoc integration. Change-Id: If75b98c0aa1aa131b52542c97a5c2bf382171729 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add license filesMilian Wolff2014-02-064-0/+1660
| | | | | Change-Id: If016bdd88fa26817ae48f77465f111743f62cb1e 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>
* Fix compilation when building with namespaced Qt.Milian Wolff2014-01-3116-1/+59
| | | | | | | | Wrap everything in the QtWebChannel module with the Qt namespace or use the Qt namespace where appropriate. Change-Id: I1ef2b2f5eb22ec5e04ca76c034ef8ebf4043b899 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Mark QtWebKit as optional module dependency.Milian Wolff2014-01-313-2/+6
| | | | | | | | | | | | | | The current CI system fails to build the webchannel when QtWebKit is included in sync.profile, so we ignore it for now and adapt the QMake build system to only include the declarative tests when webkit is found. As discussed with tronical, sifalt and sahumada, the qtqa scripts will need to be adapted to cope with optional dependencies of non-qt5 modules. Change-Id: Id89b763ef2697e9e72eb4064c150971b13ebccc3 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add QML WebKit example which can be run with qmlscene.Milian Wolff2014-01-313-0/+176
| | | | | | | | | | | | It depends on QtQuickControls for layouting of the QML server side and uses an HTML page similar to the one used by the existing standalone example. The example itself uses the simple raw message passing and simulates a chat app between QML server and HTML client. Change-Id: Ib4ce39ca736febb82a7d56bef4501888b8c06bc7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Remove examples written by Noam which are under the Nokia license.Milian Wolff2014-01-1617-859/+0
| | | | | | | I'll write new examples from scratch using the proper license. Change-Id: If13e57cf8b19cf45178b6fccace59cb56410d84e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fixup license headers of the files written by me.Milian Wolff2014-01-1626-113/+135
| | | | | | | | | | | | Some tests referenced Nokia in their license even though that was never the case. The tests where written completely by me after Qt Nokia times. What is missing are the examples which are still mostly original work by Noam back then in Nokia times. The rest was (re-)written by me completely since then anyways. Change-Id: Ib423fb3459bcc1f7464a02de4fd82ddfd614d282 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Properly convert JSON data to target type of function parameter.Milian Wolff2014-01-104-44/+64
| | | | | | | | | | | | | | | | | | | This used to work but broke in one of the last few commits apparently. Now we add a proper unit test to ensure it stays working. The issue was that JSON only knows e.g. numeric types stored as double. When we then try to call a method taking an int with the VariantArgument that tries to convert the double to int, we failed and produced an invalid QVariant which then converts to 0. Now we use the appropriate API to convert the JSON data to the correct target type before calling the method. Furthermore, it became clear that we can greatly cleanup the VariantArgument thanks to that. It now is reduced to just a QVariant wrapper class with an implicit cast operator to QGenericArgument. Change-Id: Ieaf60f548ea9584e7d760f9cd935da455787f376 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add declarative object-registration API to QML WebChannel.Milian Wolff2014-01-109-19/+256
| | | | | | | | | | | | The new registeredObjects list property is now preferred over the old imparative registerObject/registerObjects API. Items that are added to the list need an attached WebChannel.id property which holds the identifier under which the object is published to remote clients. Change-Id: I96a8047b9a85e27f3fd48c900180c22ebd20eb35 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix warning about include in public header.Milian Wolff2014-01-091-1/+1
| | | | | | | | | | | QMake reported the following warnings which is fixed by this patch: QtWebChannel: WARNING: .../qwebchannel/src/webchannel/qwebchannel.h includes qwebchannelglobal.h when it should include QtWebChannel/qwebchannelglobal.h Change-Id: Ib6a330e372a9de32d9578aa17ea0d74257a23676 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix regression in handling of var-emitting signals from QML.Milian Wolff2014-01-092-1/+24
| | | | | | | | | | | | Qt 5.3 propagates var-arguments of signals as QJSValue instead of as a QVariant. This then fails to be serialized to QJson, failing our unit tests. Now, QJSValue types are manually casted to QJsonValues which makes the tests pass again. Change-Id: I730c595eee214ebe3d1f83009cd5605f66407f55 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Cleanup public API, remove private slot.Milian Wolff2014-01-084-12/+5
| | | | | Change-Id: I73a83380c571ed5a400b16cb255562bb8079eaac Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Simplify usage of QWebChannel on the server side.Milian Wolff2014-01-0819-536/+711
| | | | | | | | | | | This is achieved by hiding the MetaObjectPublisher completely as private API. The QWebChannel is the only publisher API and now handles both the socket as well as the publisher internally. This now allows us to create a proper QML api in the new QmlWebChannel. Change-Id: I3096364af8485353ca9bc19df4a81a8e4552c3d7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Make test_property less flaky by skipping idle messages.Milian Wolff2014-01-081-8/+4
| | | | | | | | These messages are somewhat unpredictable in order and as such we skip them instead of relying on their order. Change-Id: I24c082ea1afe6ede1a8058195f01ffba1e6ca8e3 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fixup and cleanup examples to make them work properly.Milian Wolff2014-01-088-13/+35
| | | | | | | | | This fixes some regressions introduced by previous commits and ensures that the examples work as intended. While at it, the code is cleaned up a bit by using resources instead of referencing files in the source dir. Change-Id: I01da305429dcdebcb96284b7110c59f3090b2201 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Simplify QWebChannel usage by merging webchannel.js and qobject.js.Milian Wolff2014-01-0818-288/+218
| | | | | | | | | | | The code now resides in a single qwebchannel.js file and there is only a single callback-nesting required to setup a MetaObjectPublisher connection. The server-side will be simplified in the next step. Change-Id: Ib5fc77a03c2b281c61af91713411eed571ec6108 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Allow running of QML tests without needing "make install" first.Milian Wolff2014-01-081-2/+2
| | | | | | | | In addition to these steps, the developer must symlink the qmldir from the source directory to <his build-folder>/qml/QtWebChannel. Change-Id: Ieb1131edc907c98d9ce9134760f14633b07eb080 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Optimize: Use property-indices instead of names for notifications.Milian Wolff2014-01-084-30/+33
| | | | | | | | | | | | | | | This reduces the traffic as the indices are usually much smaller than the property names. As such, the benchPropertyUpdates gets a speed boost of about 9% (or 10ms vs. 11ms). As we need to transmit the index during initialization that degrades its performance slightly by ca. 4% (13ms vs. 12.5ms). Considering that the initialization only takes place once whereas the property updates potentially often, this is a good tradeoff. Change-Id: If7df3e360f1528b7d7aa26c63ce851363ae9fd6a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>