From dd078be36bc3f4923d0589ef7fcb113f61fa77da Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Thu, 2 Jun 2022 08:06:52 +0200 Subject: Prove that the service worker works with otr profile Check registration installation and activation of service worker and add basic message ping pong test. Change-Id: Ia446553ccbc62b45a5d6313cbbdf15108adcdd36 Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit 10b4b06d28dbeb0de67edcb94eb85df4d70e4f55) Reviewed-by: Qt Cherry-pick Bot --- .../resources/sw.html | 39 ++++++++++++++++++---- .../resources/sw.js | 15 ++++++++- .../tst_qwebengineurlrequestinterceptor.cpp | 12 +++++-- 3 files changed, 56 insertions(+), 10 deletions(-) (limited to 'tests') diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.html b/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.html index af44b45a2..fc3d9ded4 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.html +++ b/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.html @@ -2,13 +2,40 @@ diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.js b/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.js index 2216e2a07..196a9ad67 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.js +++ b/tests/auto/core/qwebengineurlrequestinterceptor/resources/sw.js @@ -1,3 +1,16 @@ self.addEventListener('install', function(event) { - console.log('ServiceWorker installed'); + event.waitUntil(self.skipWaiting()); +}); + +self.addEventListener('activate', function(event) { + event.waitUntil(self.clients.claim()); +}); +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'PING') { + self.clients.matchAll({includeUncontrolled: true, type: 'window'}).then((clients) => { + if (clients && clients.length) { + clients[0].postMessage({type: 'PONG'}); + } + }); + } }); diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp index a3f3cc3e3..79cbb5421 100644 --- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp +++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp @@ -726,7 +726,6 @@ void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker() HttpServer server; server.setResourceDirs({ QDir(QT_TESTCASE_SOURCEDIR).canonicalPath() + "/resources" }); QVERIFY(server.start()); - QWebEngineProfile profile; std::unique_ptr page; page.reset(new ConsolePage(&profile)); @@ -735,9 +734,16 @@ void tst_QWebEngineUrlRequestInterceptor::jsServiceWorker() QVERIFY(loadSync(page.get(), server.url("/sw.html"))); // We expect only one message here, because logging of services workers is not exposed in our API. - QTRY_COMPARE_WITH_TIMEOUT(page->messages.count(), 1, 20000); - QCOMPARE(page->levels.at(0), QWebEnginePage::InfoMessageLevel); + // Note this is very fragile setup , you need fresh profile otherwise install event might not get triggered + // and this in turn can lead to incorrect intercepted requests, therefore we should keep this off the record. + QTRY_COMPARE_WITH_TIMEOUT(page->messages.count(), 5, 20000); + QCOMPARE(page->levels.at(0), QWebEnginePage::InfoMessageLevel); + QCOMPARE(page->messages.at(0),QLatin1String("Service worker installing")); + QCOMPARE(page->messages.at(1),QLatin1String("Service worker installed")); + QCOMPARE(page->messages.at(2),QLatin1String("Service worker activating")); + QCOMPARE(page->messages.at(3),QLatin1String("Service worker activated")); + QCOMPARE(page->messages.at(4),QLatin1String("Service worker done")); QUrl firstPartyUrl = QUrl(server.url().toString() + "sw.html"); QList infos; // Service Worker -- cgit v1.2.3