A service worker instance should be terminated when its SWServer is destroyed
https://bugs.webkit.org/show_bug.cgi?id=197801
<rdar://problem/50587270>
Reviewed by Chris Dumez.
Source/WebCore:
On session destruction, the SWServer is destroyed.
At that time, it should terminate all its running service workers.
Covered by updated API test.
* workers/service/server/SWServer.cpp:
(WebCore::SWServer::~SWServer):
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@245200 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 0bec278..08adb42 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,18 @@
+2019-05-10 Youenn Fablet <youenn@apple.com>
+
+ A service worker instance should be terminated when its SWServer is destroyed
+ https://bugs.webkit.org/show_bug.cgi?id=197801
+ <rdar://problem/50587270>
+
+ Reviewed by Chris Dumez.
+
+ On session destruction, the SWServer is destroyed.
+ At that time, it should terminate all its running service workers.
+ Covered by updated API test.
+
+ * workers/service/server/SWServer.cpp:
+ (WebCore::SWServer::~SWServer):
+
2019-05-10 Eric Carlson <eric.carlson@apple.com>
[iOS] HTMLMediaElement sometimes doesn't send 'webkitplaybacktargetavailabilitychanged' event
diff --git a/Source/WebCore/workers/service/server/SWServer.cpp b/Source/WebCore/workers/service/server/SWServer.cpp
index 2a283f4..0200ec6 100644
--- a/Source/WebCore/workers/service/server/SWServer.cpp
+++ b/Source/WebCore/workers/service/server/SWServer.cpp
@@ -69,6 +69,14 @@
auto connections = WTFMove(m_connections);
connections.clear();
+ Vector<SWServerWorker*> runningWorkers;
+ for (auto& worker : m_runningOrTerminatingWorkers.values()) {
+ if (worker->isRunning())
+ runningWorkers.append(worker.ptr());
+ }
+ for (auto& runningWorker : runningWorkers)
+ terminateWorker(*runningWorker);
+
allServers().remove(this);
}
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 102acb2..c7f70eb 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,13 @@
+2019-05-10 Youenn Fablet <youenn@apple.com>
+
+ A service worker instance should be terminated when its SWServer is destroyed
+ https://bugs.webkit.org/show_bug.cgi?id=197801
+ <rdar://problem/50587270>
+
+ Reviewed by Chris Dumez.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+
2019-05-10 Chris Dumez <cdumez@apple.com>
Do not wait until requestPermission() is called to fire deviceorientation events if permission was already granted
diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
index 4cd1b33..3dd4d7b 100644
--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
@@ -32,6 +32,7 @@
#import <WebKit/WKURLSchemeHandler.h>
#import <WebKit/WKURLSchemeTaskPrivate.h>
#import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
#import <WebKit/WKWebsiteDataStorePrivate.h>
#import <WebKit/WKWebsiteDataStoreRef.h>
#import <WebKit/WebKit.h>
@@ -1502,6 +1503,7 @@
TestWebKitAPI::Util::run(&done);
done = false;
+ [webView _close];
webView = nullptr;
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:serviceWorkersPath.path]);