summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Speculatively prepare for even slower CIAllan Sandfeld Jensen2019-10-231-8/+8
| | | | | | | | | Bumb up timeouts to even more higher levels to accommodate even slower CI instances. Task-number: QTBUG-79290 Change-Id: I33a4660165f72837273c3089092687a8962c83ba Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Support qrc protocol in @match rules of user scriptsSzabolcs David2019-09-301-0/+28
| | | | | | | | | | | Pulls in the following Chromium changes: 7ac85fb4cc6 Fix building with pulseaudio 13 7956dfb8d20 Support qrc protocol in UrlPattern 9af3b1bf632 Fix pressure of tablet events Task-number: QTBUG-76173 Change-Id: Iffc21ed6eb0a99e2b96780ce4f11629d38f8b47e Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* Fix tst_QWebEngineScript::loadEvents()Tamas Zakor2019-09-051-29/+54
| | | | | | | | | | If the page load takes more than 500ms the Deferred injection point will be triggered before the load finish event. Fix the test to handle this situation. Change-Id: If6ad9250127650630ef96c35c79ce6bfe73ecf95 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Adaptations for Chromium 75Allan Sandfeld Jensen2019-07-101-1/+1
| | | | | Change-Id: Idad08244e0c749a9f70f5eb9f8cd236039b941b3 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* Implement page lifecycle APIJüri Valdmann2019-05-241-0/+13
| | | | | | | | | | | | | | | | | [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>
* Do not blacklist webChannelWithBadStringMichal Klocek2019-05-031-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | This commit is about documenting some weird new behavior. Since Chormium 72 our webChannelWithBadString fails. This is fascinating issue and can be tracked down to commit in Chromium https://chromium-review.googlesource.com/c/1282993 which "fixes" well-forming of JSON.strigify. This function is used by webchannel.js to send data through webchannel transport. In c++ land we get now for invalid utf16 replacement in form of '\\u' + i.toString(16).padStart(4, '0'). This sadly does not trigger any longer REPLACE_INVALID_UTF8 in WebChannelTransport::NativeQtSendMessage. Moreover this goes even "worse" since QMetaObjectPublisher will create invalid utf16 form raw "\ud800" string -> '\ud800'. This is not an error per se, since test creates invalid utf16 character in javascript and it ends as invalid utf8 character in c++. Btw enable test on qemu. Change-Id: I36f2df417d7b9f3f2113792f08025821737d8d01 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* Run non-MainWorld DocumentCreation scripts even if JS disabledJüri Valdmann2019-04-081-0/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes regression, introduced by the fix for QTBUG-66011, where setting JavascriptEnabled to false stops all scripts from running instead of only MainWorld scripts (as documented). Only the DocumentCreation injection point is affected. The original change which introduced the regression consisted of moving the DocumentCreation injection point from ContentRendererClient::RunScriptsAtDocumentStart to RenderFrameObserver::DidClearWindowObject. The problem of scripts not working on view-source URLs was fixed by this move, but it turns out that the call to DidClearWindowObject happens to be conditional on Document::CanExecuteScripts and this is, of course, false if JS is disabled. Hence the regression. This new patch moves the injection point again to a task launched from RenderFrameObserver::DidCommitProvisionalLoad. DidCommitProvisionalLoad and DidClearWindowObject are both indirectly called from DocumentLoader::InstallNewDocument, however the former is called before the Document is opened and is therefore too early for script execution. As such, the execution is delayed by posting a task which, in theory, should be scheduled very soon after the normal call to DidClearWindowObject. Fixes: QTBUG-74304 Change-Id: Iac8714bcc5651c287b73181811af26996d955af5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Test world-ids over 11Allan Sandfeld Jensen2018-10-231-3/+14
| | | | | | | Add a test that we can have larger world ids. Change-Id: Ibc8a0eb5e6f56aa41183adb3726b2c3141197c84 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Fix warning when building without webchannel supportSzabolcs David2018-10-081-1/+2
| | | | | | | | warning: ‘QWebEngineScript webChannelScript()’ defined but not used [-Wunused-function] Change-Id: If7d5def2c539c3b2d448452fa154c1574778b17d Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Make WebChannel an optional featureMichal Klocek2018-08-091-7/+11
| | | | | | | Add webengine-webchannel feature. Change-Id: I600572180f8169aafe79cf0408527cc087d9a007 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* Remove qwebchannel.js from test and exampleMichal Klocek2018-05-171-3/+2
| | | | | | | | Use qwebchannel.js shipped with qtwebchannel. Change-Id: Iceead5131d22a6988bbb4e7a3cca1e9f21908e3e Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io> Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Replace invalid characters in WebChannel messagesJüri Valdmann2018-05-161-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | Turns out JavaScript's JSON.stringify is not guaranteed to produce valid UTF-16 strings. It is possible in JavaScript to produce string objects which contain invalid code units (unmatched surrogate pairs) and JSON.stringify will simply copy this data to it's output. However, such a string cannot be losslessly converted to UTF-8 and this leads to fun errors in WebChannelIPCTransport. This patch - Adds a test for the scenario above. - Changes WebChannelIPCTransport to replace these invalid code units with the Unicode replacement character U+FFFD. - Changes WebChannelIPCTransportHost to validate the data it gets from the renderer. Not validating the data defeats the whole point of Chromium's fancy multi-process architecture: the renderer is not to be trusted. - Changes WebChannelIPCTransport to throw JavaScript exceptions for various errors (missing argument, wrong type, invalid JSON). Seems like the polite thing to do. Task-number: QTBUG-61969 Change-Id: I83275a0eaed77109dc458b80e27217108dde9f7b Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Fix building with Qt 5.9Allan Sandfeld Jensen2018-04-071-2/+2
| | | | | | | | Avoid hitting undefined reference to 'bool TestNamespace::QTest::qCompare<unsigned long, unsigned int>...' Change-Id: I91588869708899e1055619ca9ba46d2061869417 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Add tst_qwebenginescript loadEventsJüri Valdmann2018-04-031-39/+104
| | | | | | | | | | | | | | Replace injectionPoint test with a timeout-less version that uses - both a single-frame and a multi-frame page - both main and isolated worlds - cross-process navigation - window.open - profile-wide scripts Task-number: QTBUG-66338 Change-Id: Ica4acb8ada4acc38aa5e1ca00e7512a2e69b785f Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Make WebChannelIPCTransport into a RenderFrameObserverJüri Valdmann2018-03-221-8/+113
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As of version 63, Chromium creates proxy frames also for the main frame in the frame tree during cross-process navigations. This leads to a segmentation fault in WebChannelIPCTransport because we assume that all main frames are local. See https://crrev.com/27caae83cb530daaf49f9a38793e427cdf493a65 for details. This patch refactors the renderer-side WebChannelIPCTransport from a RenderViewObserver into a RenderFrameObserver, which prevents the segmentation fault since the RenderFrameObserver is not created for proxy frames. Most likely this would have to be done eventually anyway since the RenderView and RenderViewObserver classes are deprecated and will likely be removed as part of the Site Isolation project. Installation is changed to follow Chromium's RenderFrameImpl in the sense of performing the installation from RenderFrameObserver::DidClearWindowObject instead of ContentRendererClient::RunScriptsAtDocumentStart. This has the benefit of avoiding the ScriptForbiddenScope DCHECK. Additionally there are the following minor changes: - The deprecated parameterless version of v8::Value::ToObject() method is replaced with v8::Value::IsObject() check and v8::Local::Cast. - The deprecated v8::Handle typedef is replaced with v8::Local. - The deprecated single-parameter WebContentsObserver::OnMessageReceived is replaced with the new two-parameter version. - blink::MainThreadIsolate() is used instead of v8::Isolate::GetCurrent() for Install/Uninstall since we know we are executing on the main thread. - WebChannelIPCTransportHost is changed to ignore messages from unexpected renderers in case something goes wrong with the renderers. - Logging is added to WebChannelIPCTransportHost for debugging purposes. Some new unit tests are added, all of which fail with the old version. Task-number: QTBUG-66333 Change-Id: I936d142fb042d9f936a3f9d08d4328ecba595f1f Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Cleanup tst_QWebEngineScript::injectionPointAllan Sandfeld Jensen2017-12-301-15/+16
| | | | | | | | | The code was not correctly giving a function as argument to the addEventHandler, and the whole logic was more complicated than it needed to be. Change-Id: I21e4e6bb6adf1071ae7eb2798d129224af8ef0fb Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* Verify result of QTest::qWaitForWindowExposed() in auto testsPeter Varga2017-10-181-1/+1
| | | | | Change-Id: I8e75d21853ac8f7681b20101e40597154bcaca2d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Adaptations for Chromium 60Alexandru Croitor2017-09-111-0/+53
| | | | | | Change-Id: I536258e22c2ec143f2fd3f1cbda229e0611b6af4 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Port autotests from own waitForSignal() to QSignalSpy::wait()David Faure2016-11-291-10/+17
| | | | | | | | I added QSignalSpy::wait() in Qt 5.0 exactly for this purpose. Change-Id: I895a92f5f7e4e8554e00f6668e6973cc2c903adf Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Fix the IPC webChannelTransport not being available on reloadJocelyn Turcotte2016-06-131-2/+23
| | | | | | | | | | | | The gin JavaScript binging gets destroyed on page reload after all references to it disappear from the previous document. Do like other gin wrapper and reinstall the transport binding on DidCreateDocumentElement, following how it's done by the MojoBindingsController. Task-number: QTBUG-53411 Change-Id: Ibcd9ef9dbedc5762d4f2210fd81f68e5b9127680 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Add API to set WebChannel on isolated worldAllan Sandfeld Jensen2016-01-151-1/+69
| | | | | | | | | | | Make it possible to set a web-channel so that it can only be accessed by private scripts. Pulls in needed API extension in 3rdparty. Task-number: QTBUG-50318 Change-Id: I61bcce5c318dffe0a406ee8cddf31f58a021c22c Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Add methods for running javascript in isolated worldsAllan Sandfeld Jensen2016-01-081-0/+2
| | | | | | | | We exposed javascript worlds for user-scripts, this adds variants of runJavaScript that can access those worlds. Change-Id: I5a0b40b863b543cd364c902d0a84ae2c35e2a0b8 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* stabilize tst_QWebEngineScript::injectionPointJoerg Bornemann2015-11-121-4/+4
| | | | | | | | Use QTRY_COMPARE instead of a hard-coded timeout. Fix usage of setTimeout in DOMContentLoaded event listener. Change-Id: I915ea0d2c54cf45be42803963d03b19c15135fd4 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
* Print JS console messages by defaultKai Koehne2015-11-061-17/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change the behavior of QWebEnginePage/WebEngineView to print JavaScript console.warn and console.error messages by default in a 'js' logging category. This matches also the behavior for QtQml, where console messages end up in a 'qml' logging category by default. So far access to the JavaScript console required either use of the remote debugging functionality, subclassing of QWebEnginePage, or implementing a custom handler. Anyhow, even then writing a seamless forwarding of the data and metadata to the Qt message handler is difficult. This patches implements this forwarding by default. The behavior can be changed by either setting up rules for the 'js' category, e.g. setFilterRules("js.*=false"); or by implementing onJavaScriptConsoleMessage(), or overriding QWebEnginePage::javaScriptConsoleMessage. [ChangeLog] Unhandled JS console messages are now forwarded to to the Qt message handler inside a 'js' category. Change-Id: I5480383a80dcf7a122496f9b7915264ef9036db3 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Enable build of QWebEngineScript API testSzabolcs David2015-04-071-24/+24
| | | | | | | The MSVC doesn't support this type of string literal concatenation. Change-Id: I051593a34c801df6c5264370ad751c45bbb41b5a Reviewed-by: Pierre Rossi <pierre.rossi@theqtcompany.com>
* QWebEngineScript autotestPierre Rossi2015-03-181-0/+166
Change-Id: Id29c1ed0b29114f426c35a45192a723d305c5b29 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>