summaryrefslogtreecommitdiff
path: root/tests/auto/widgets/qwebenginescript
Commit message (Collapse)AuthorAgeFilesLines
* Fix user script management when subframes are presentAllan Sandfeld Jensen2023-04-301-0/+33
| | | | | | | | | | Only the main frames should administer scripts associated with it. Pick-to: 6.5 Fixes: QTBUG-113109 Change-Id: Ibda66f55ef99da632134a9de1425797262faba9b Reviewed-by: Michael Brüning <michael.bruning@qt.io> Reviewed-by: Martin Negyokru <negyokru@inf.u-szeged.hu>
* Port from container::count() and length() to size() - V4Marc Mutz2022-10-111-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a semantic patch using ClangTidyTransformator as in qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8, but extended to handle typedefs and accesses through pointers, too: const std::string o = "object"; auto hasTypeIgnoringPointer = [](auto type) { return anyOf(hasType(type), hasType(pointsTo(type))); }; auto derivedFromAnyOfClasses = [&](ArrayRef<StringRef> classes) { auto exprOfDeclaredType = [&](auto decl) { return expr(hasTypeIgnoringPointer(hasUnqualifiedDesugaredType(recordType(hasDeclaration(decl))))).bind(o); }; return exprOfDeclaredType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes)))); }; auto renameMethod = [&] (ArrayRef<StringRef> classes, StringRef from, StringRef to) { return makeRule(cxxMemberCallExpr(on(derivedFromAnyOfClasses(classes)), callee(cxxMethodDecl(hasName(from), parameterCountIs(0)))), changeTo(cat(access(o, cat(to)), "()")), cat("use '", to, "' instead of '", from, "'")); }; renameMethod(<classes>, "count", "size"); renameMethod(<classes>, "length", "size"); a.k.a qt-port-to-std-compatible-api V4 with config Scope: 'Container'. Change-Id: I3e6fef8eca212da0c4f0b464545ba96183b4476f Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Change the license of all CMakeLists.txt and *.cmake files to BSDLucie Gérard2022-08-261-1/+1
| | | | | | Task-number: QTBUG-105718 Change-Id: I2ad190e5536cdbdc8d2656e61892545d66911a02 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Increase timeoutsAllan Sandfeld Jensen2022-08-171-1/+1
| | | | | | | | | | Trying to pass on qemu-arm64 Pick-to: 6.4 Task-number: QTBUG-105342 Change-Id: I5eca4ef2235d26b88207decd66b06c30b9f9972f Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Add license headers to cmake filesLucie Gérard2022-07-071-0/+3
| | | | | | | | | | | | CMakeLists.txt and .cmake files of significant size (more than 2 lines according to our check in tst_license.pl) now have the copyright and license header. Existing copyright statements remain intact Task-number: QTBUG-88621 Change-Id: I118bd63694cfe2c9a413af4a38828a31727f8e86 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Cleanup code and clang build warningsKirill Burtsev2022-01-021-1/+1
| | | | | | | | | Fix build noise as reported by clang for issues like api deprecation, unused variables, sign/unsigned mismatch and other non critical issues. Pick-to: 6.2 Change-Id: I4fba25406eea8170e3283c42e908ae86bd512e3a Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Fix WebChannel when JavaScript is disabledSzabolcs David2021-09-271-0/+31
| | | | | | | | | | | | | WebChannel was not working in ApplicationWorld with JavaScript disabled in MainWorld, because WebChannelIPCTransport::DidClearWindowObject() is called only when the window object was cleared in the main world. Moving the WebChannelTransport installation logic to DidCreateScriptContext() works in other worlds, so fixes the problem. Task-number: QTBUG-88875 Pick-to: 6.2 Change-Id: Ia75613b66a1e049f617f0664684b153b6875e9de Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Nuke all qmake files from testsMichal Klocek2021-08-312-12/+0
| | | | | | Pick-to: 6.2 Change-Id: Ibad2e50d840a2eb0ccb9ac65158e512249a2bc79 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Replace calls to obsolete cmake functions with modern alternativeFabian Kosmale2021-06-071-1/+1
| | | | | Change-Id: I5674d887a73a6a693d1babc416470c9873491eb3 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Add tests to the cmake buildMichal Klocek2021-05-222-1/+27
| | | | | | | | | | | | | | | | | | | | Use QT_TESTCASE_SOURCEDIR instead of TESTS_SOURCE_DIR. Introduce Test::HttpServer and Test::Util targets. Query shared data location from server. Clean up "shared" resources. Note QT_TESTCASE_SOURCEDIR must be turned into the canonical form since the user can call on windows: "cmake \path\to\foo" instead of "cmake c:\path\to\foo" which will break all file:// urls. Note this patch breaks qmake builds. Task-number: QTBUG-91760 Change-Id: Ibc1f904ac9acd375d1ff70ff80f0c533497e3f20 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Make script execution order deterministicAllan Sandfeld Jensen2021-05-061-0/+49
| | | | | | | Task-number: QTBUG-77765 Change-Id: I8680a46c62e6a915cbf10c3ae48573cb95f612a5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* Stop using deprecated QVariant::TypeAllan Sandfeld Jensen2021-03-221-10/+10
| | | | | Change-Id: Icf777ac1d954036b4de626321e0ecd80a0cb83ca Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
* Merge branch '5.15' into devAllan Sandfeld Jensen2021-01-191-0/+2
|\ | | | | | | | | | | Last commits before 87 update. Change-Id: Id156b0199a8fd354c946cfe604ae8541ba554658
| * Migrate user script IPC to mojoMichal Klocek2020-12-111-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use mojo instead of old IPC, keep current design and use two interfaces one global and one per frame for now, also use in both cases associated interface with ipc channel otherwise script can be added during the page load, which will radomly brake tests. This change moves UserDataScript to chromium since mojo binding generation did not work correctly. Use StructTraits when serializing the class. Change-Id: I7073fb831c96849e47864382188300db3c9137d9 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Cleanup qwebenginescript and qwebenginescriptcollection apiMichal Klocek2020-09-281-2/+2
|/ | | | | | | | | | | | | | | | | | This patch cleans up script and collection apis: * do not allocate user_script on heap, there is no need for that. * remove isNull(), which was used by collection.findScript(name) * remove collection.size(), there is already collection.count() * remove collection.findScript(name), user can use findScripts(name) which returns list of scripts or empty list if not found * collection.findScripts(name) is simply collection.find(name) [ChangeLog] Removed QWebEngineScriptCollection::findScript(name), use QWebEngineScriptCollection::find(name) instead. Change-Id: Iecf8f1d7c26275b9ce3a1ea97cf4bd74b17f681e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Extend tst_QWebEngineScript::matchQrcUrl with negative matchJüri Valdmann2020-05-294-11/+26
| | | | | Change-Id: Idee9e3742ea3cb949f786d0e55a2e2f8530c7b1e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* 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-032-4/+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>
* Merge branch '5.12' into 5.13Allan Sandfeld Jensen2019-04-091-0/+47
|\ | | | | | | | | | | | | | | | | | | Conflicts: src/3rdparty src/core/renderer/user_resource_controller.cpp src/core/web_contents_adapter.cpp src/webengine/doc/src/qtwebengine-overview.qdoc Change-Id: I46be9d33b3b65d61dfa099ee72a3509afb9bd6a4
| * 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>
* | Adaptations for Chromium 72Allan Sandfeld Jensen2019-03-231-0/+3
|/ | | | | Change-Id: Ic355257066c7c1433862cb41e6f2bfa831147e0d Reviewed-by: Jüri Valdmann <juri.valdmann@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-172-4/+3
| | | | | | | | 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-163-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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-033-39/+115
| | | | | | | | | | | | | | 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-115-0/+86
| | | | | | 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>
* move automatic resource inclusion to pri filesJoerg Bornemann2015-08-251-1/+0
| | | | | | | Avoid code duplication. Change-Id: Icd270ff4e45112111b7eb9590e415947f63ce15b Reviewed-by: Andras Becsi <andras.becsi@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-182-0/+168
Change-Id: Id29c1ed0b29114f426c35a45192a723d305c5b29 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>