Add ServiceWorkerJob.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Aug 2017 19:28:26 +0000 (19:28 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Aug 2017 19:28:26 +0000 (19:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175241

Reviewed by Tim Horton.

Source/WebCore:

Test: http/tests/workers/service/basic-register.html

This patch does a few things:
- Adds the spec concept of a ServiceWorkerJob (in the WebProcess, at least)
- Adds a ServiceWorkerProvider interface for WebKit to implement
- Actually creates a job for service worker registration and "schedules" it,
  though it always immediately errors out the promise.

Actually queuing jobs and executing asynchronously is coming up soon.

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:

* dom/Document.cpp:
(WebCore::Document::sessionID const):
* dom/Document.h:

* workers/ServiceWorkerContainer.cpp:
(WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
(WebCore::ServiceWorkerContainer::addRegistration):
(WebCore::ServiceWorkerContainer::scheduleJob):
(WebCore::ServiceWorkerContainer::jobDidFinish):
* workers/ServiceWorkerContainer.h:

* workers/ServiceWorkerJob.cpp: Added.
(WebCore::ServiceWorkerJob::ServiceWorkerJob):
(WebCore::ServiceWorkerJob::~ServiceWorkerJob):
(WebCore::ServiceWorkerJob::failedWithException):
* workers/ServiceWorkerJob.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
(WebCore::ServiceWorkerJob::createRegisterJob):
(WebCore::ServiceWorkerJob::identifier const):

* workers/ServiceWorkerJobClient.h: Added.
(WebCore::ServiceWorkerJobClient::~ServiceWorkerJobClient):

* workers/ServiceWorkerProvider.cpp: Added.
(WebCore::ServiceWorkerProvider::singleton):
(WebCore::ServiceWorkerProvider::setSharedProvider):
* workers/ServiceWorkerProvider.h: Added.
* workers/ServiceWorkerRegistrationOptions.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
* workers/ServiceWorkerRegistrationParameters.cpp: Added.
* workers/ServiceWorkerRegistrationParameters.h: Added.

Source/WebKit:

* CMakeLists.txt:
* WebKit.xcodeproj/project.pbxproj:

* WebProcess/Storage/WebServiceWorkerProvider.cpp: Added.
(WebKit::WebServiceWorkerProvider::singleton):
(WebKit::WebServiceWorkerProvider::WebServiceWorkerProvider):
(WebKit::WebServiceWorkerProvider::scheduleJob):
* WebProcess/Storage/WebServiceWorkerProvider.h: Added.

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):

LayoutTests:

Verifies that the "serviceWorker.register()" job we currently schedule fails as expected.

* http/tests/workers/service/basic-register-expected.txt: Added.
* http/tests/workers/service/basic-register.html: Added.
* http/tests/workers/service/resources/basic-register.js: Added.
* http/tests/workers/service/resources/empty-worker.js: Added.
* platform/mac-wk1/TestExpectations:
* platform/win/TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220539 268f45cc-cd09-0410-ab3c-d52691b4dbfc

28 files changed:
LayoutTests/ChangeLog
LayoutTests/http/tests/workers/service/basic-register-expected.txt [new file with mode: 0644]
LayoutTests/http/tests/workers/service/basic-register.html [new file with mode: 0644]
LayoutTests/http/tests/workers/service/resources/basic-register.js [new file with mode: 0644]
LayoutTests/http/tests/workers/service/resources/empty-worker.js [new file with mode: 0644]
LayoutTests/platform/mac-wk1/TestExpectations
LayoutTests/platform/win/TestExpectations
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Source/WebCore/workers/ServiceWorkerContainer.cpp
Source/WebCore/workers/ServiceWorkerContainer.h
Source/WebCore/workers/ServiceWorkerJob.cpp [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerJob.h [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerJobClient.h [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerProvider.cpp [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerProvider.h [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerRegistrationOptions.h [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerRegistrationParameters.cpp [new file with mode: 0644]
Source/WebCore/workers/ServiceWorkerRegistrationParameters.h [new file with mode: 0644]
Source/WebKit/CMakeLists.txt
Source/WebKit/ChangeLog
Source/WebKit/WebKit.xcodeproj/project.pbxproj
Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp [new file with mode: 0644]
Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h [new file with mode: 0644]
Source/WebKit/WebProcess/WebProcess.cpp

index 26f8314..afe31c0 100644 (file)
@@ -1,3 +1,19 @@
+2017-08-10  Brady Eidson  <beidson@apple.com>
+
+        Add ServiceWorkerJob.
+        https://bugs.webkit.org/show_bug.cgi?id=175241
+
+        Reviewed by Tim Horton.
+
+        Verifies that the "serviceWorker.register()" job we currently schedule fails as expected.
+
+        * http/tests/workers/service/basic-register-expected.txt: Added.
+        * http/tests/workers/service/basic-register.html: Added.
+        * http/tests/workers/service/resources/basic-register.js: Added.
+        * http/tests/workers/service/resources/empty-worker.js: Added.
+        * platform/mac-wk1/TestExpectations:
+        * platform/win/TestExpectations:
+
 2017-08-10  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r220463.
diff --git a/LayoutTests/http/tests/workers/service/basic-register-expected.txt b/LayoutTests/http/tests/workers/service/basic-register-expected.txt
new file mode 100644 (file)
index 0000000..c018e45
--- /dev/null
@@ -0,0 +1,2 @@
+CONSOLE MESSAGE: line 11: Registration failed with error: UnknownError: serviceWorker job scheduling is not yet implemented
+
diff --git a/LayoutTests/http/tests/workers/service/basic-register.html b/LayoutTests/http/tests/workers/service/basic-register.html
new file mode 100644 (file)
index 0000000..19ae5dd
--- /dev/null
@@ -0,0 +1,9 @@
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+</head>
+<body>
+
+<script src="resources/basic-register.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/http/tests/workers/service/resources/basic-register.js b/LayoutTests/http/tests/workers/service/resources/basic-register.js
new file mode 100644 (file)
index 0000000..f2d9775
--- /dev/null
@@ -0,0 +1,17 @@
+function done()
+{
+    finishJSTest();
+}
+
+navigator.serviceWorker.register("resources/empty-worker.js", { })
+.then(function(r) {
+       console.log("Registered!");
+       done();
+}, function(e) {
+       console.log("Registration failed with error: " + e);
+       done();
+})
+.catch(function(e) {
+       console.log("Exception registering: " + e);
+       done();
+});
diff --git a/LayoutTests/http/tests/workers/service/resources/empty-worker.js b/LayoutTests/http/tests/workers/service/resources/empty-worker.js
new file mode 100644 (file)
index 0000000..459fcc2
--- /dev/null
@@ -0,0 +1 @@
+// This script intentionally left blank.
index abdd9d2..a8d8b4d 100644 (file)
@@ -390,3 +390,5 @@ webkit.org/b/173432 [ Debug ] imported/w3c/web-platform-tests/fetch/nosniff/impo
 
 # requires wk2 speculative tiling
 fast/images/low-memory-decode.html [ Skip ]
+
+http/tests/workers/service [ Skip ]
index 77f7c05..71e3f6d 100644 (file)
@@ -4072,3 +4072,4 @@ imported/w3c/web-platform-tests/cors/simple-requests.htm [ Slow ]
 imported/w3c/web-platform-tests/fetch/api/basic/accept-header.any.html [ Slow ]
 imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any.html [ Slow ]
 
+http/tests/workers/service [ Skip ]
index dfdad4d..33cdd4c 100644 (file)
@@ -2979,7 +2979,10 @@ set(WebCore_SOURCES
     workers/ServiceWorker.cpp
     workers/ServiceWorkerContainer.cpp
     workers/ServiceWorkerGlobalScope.cpp
+    workers/ServiceWorkerJob.cpp
+    workers/ServiceWorkerProvider.cpp
     workers/ServiceWorkerRegistration.cpp
+    workers/ServiceWorkerRegistrationParameters.cpp
     workers/Worker.cpp
     workers/WorkerConsoleClient.cpp
     workers/WorkerEventQueue.cpp
index e28210d..7815579 100644 (file)
@@ -1,3 +1,53 @@
+2017-08-10  Brady Eidson  <beidson@apple.com>
+
+        Add ServiceWorkerJob.
+        https://bugs.webkit.org/show_bug.cgi?id=175241
+
+        Reviewed by Tim Horton.
+
+        Test: http/tests/workers/service/basic-register.html
+
+        This patch does a few things:
+        - Adds the spec concept of a ServiceWorkerJob (in the WebProcess, at least)
+        - Adds a ServiceWorkerProvider interface for WebKit to implement
+        - Actually creates a job for service worker registration and "schedules" it,
+          though it always immediately errors out the promise.
+
+        Actually queuing jobs and executing asynchronously is coming up soon.
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+
+        * dom/Document.cpp:
+        (WebCore::Document::sessionID const):
+        * dom/Document.h:
+
+        * workers/ServiceWorkerContainer.cpp:
+        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
+        (WebCore::ServiceWorkerContainer::addRegistration):
+        (WebCore::ServiceWorkerContainer::scheduleJob):
+        (WebCore::ServiceWorkerContainer::jobDidFinish):
+        * workers/ServiceWorkerContainer.h:
+
+        * workers/ServiceWorkerJob.cpp: Added.
+        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
+        (WebCore::ServiceWorkerJob::~ServiceWorkerJob):
+        (WebCore::ServiceWorkerJob::failedWithException):
+        * workers/ServiceWorkerJob.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
+        (WebCore::ServiceWorkerJob::createRegisterJob):
+        (WebCore::ServiceWorkerJob::identifier const):
+
+        * workers/ServiceWorkerJobClient.h: Added.
+        (WebCore::ServiceWorkerJobClient::~ServiceWorkerJobClient):
+
+        * workers/ServiceWorkerProvider.cpp: Added.
+        (WebCore::ServiceWorkerProvider::singleton):
+        (WebCore::ServiceWorkerProvider::setSharedProvider):
+        * workers/ServiceWorkerProvider.h: Added.
+        * workers/ServiceWorkerRegistrationOptions.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
+        * workers/ServiceWorkerRegistrationParameters.cpp: Added.
+        * workers/ServiceWorkerRegistrationParameters.h: Added.
+
 2017-08-10  Tim Horton  <timothy_horton@apple.com>
 
         Remove some unused lambda captures so that WebKit builds with -Wunused-lambda-capture
index 4b4070a..8aa57ad 100644 (file)
                510D4A37103165EE0049EA54 /* SocketStreamHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A31103165EE0049EA54 /* SocketStreamHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
                510D4A38103165EE0049EA54 /* SocketStreamHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5110FCFC1E03641D006F8D0B /* IDBCursorRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 5110FCFB1E0362A5006F8D0B /* IDBCursorRecord.h */; };
+               511CA6791F3904B10019E074 /* ServiceWorkerProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */; };
+               511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               511CA67D1F3905A60019E074 /* ServiceWorkerJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */; };
+               511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA67B1F3905710019E074 /* ServiceWorkerJob.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               511CA6831F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */; };
+               511CA6841F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */; settings = {ATTRIBUTES = (Private, ); }; };
                511EC1271C50AACA0032F983 /* IDBSerialization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511EC1251C50AA570032F983 /* IDBSerialization.cpp */; };
                511EC1281C50AACA0032F983 /* IDBSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 511EC1261C50AA570032F983 /* IDBSerialization.h */; };
                511EC12B1C50ABBF0032F983 /* SQLiteIDBTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511EC1291C50ABBA0032F983 /* SQLiteIDBTransaction.cpp */; };
                5182C23E1F313A090059BA7C /* ServiceWorker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C23C1F3139FC0059BA7C /* ServiceWorker.cpp */; };
                5182C23F1F313A090059BA7C /* ServiceWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23B1F3139FC0059BA7C /* ServiceWorker.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5182C2401F313A090059BA7C /* ServiceWorkerContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2381F3139FC0059BA7C /* ServiceWorkerContainer.cpp */; };
-               5182C2411F313A090059BA7C /* ServiceWorkerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C2331F3139FC0059BA7C /* ServiceWorkerContainer.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5182C2411F313A090059BA7C /* ServiceWorkerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C2331F3139FC0059BA7C /* ServiceWorkerContainer.h */; };
                5182C2421F313A090059BA7C /* ServiceWorkerGlobalScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2361F3139FC0059BA7C /* ServiceWorkerGlobalScope.cpp */; };
                5182C2431F313A090059BA7C /* ServiceWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5182C2441F313A090059BA7C /* ServiceWorkerRegistration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2341F3139FC0059BA7C /* ServiceWorkerRegistration.cpp */; };
                51BA4ACB1BBC5BD900DF3D6D /* MemoryIDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */; };
                51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
                51BE37E00DAEE00E001085FC /* StorageArea.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BE37DE0DAEE00E001085FC /* StorageArea.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               51BEB6391F3B94B0005029B9 /* ServiceWorkerRegistrationOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
                51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0AA380F2AA10A001648C2 /* CachedFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
                51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */; };
                51C61B0A1DE536E7008A212D /* ScrollingMomentumCalculator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C61B081DE536E7008A212D /* ScrollingMomentumCalculator.cpp */; };
                510D4A31103165EE0049EA54 /* SocketStreamHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandle.h; sourceTree = "<group>"; };
                510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandleClient.h; sourceTree = "<group>"; };
                5110FCFB1E0362A5006F8D0B /* IDBCursorRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCursorRecord.h; sourceTree = "<group>"; };
+               511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerProvider.cpp; sourceTree = "<group>"; };
+               511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerProvider.h; sourceTree = "<group>"; };
+               511CA67B1F3905710019E074 /* ServiceWorkerJob.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJob.h; sourceTree = "<group>"; };
+               511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerJob.cpp; sourceTree = "<group>"; };
+               511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJobClient.h; sourceTree = "<group>"; };
+               511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerRegistrationParameters.h; sourceTree = "<group>"; };
+               511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerRegistrationParameters.cpp; sourceTree = "<group>"; };
                511EC1251C50AA570032F983 /* IDBSerialization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSerialization.cpp; sourceTree = "<group>"; };
                511EC1261C50AA570032F983 /* IDBSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSerialization.h; sourceTree = "<group>"; };
                511EC1291C50ABBA0032F983 /* SQLiteIDBTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLiteIDBTransaction.cpp; sourceTree = "<group>"; };
                51BA4AC81BBC5B9E00DF3D6D /* MemoryIDBBackingStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryIDBBackingStore.cpp; sourceTree = "<group>"; };
                51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryIDBBackingStore.h; sourceTree = "<group>"; };
                51BE37DE0DAEE00E001085FC /* StorageArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageArea.h; sourceTree = "<group>"; };
+               51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerRegistrationOptions.h; sourceTree = "<group>"; };
                51C0AA380F2AA10A001648C2 /* CachedFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedFrame.h; sourceTree = "<group>"; };
                51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedFrame.cpp; sourceTree = "<group>"; };
                51C61B081DE536E7008A212D /* ScrollingMomentumCalculator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingMomentumCalculator.cpp; sourceTree = "<group>"; };
                                5182C2361F3139FC0059BA7C /* ServiceWorkerGlobalScope.cpp */,
                                5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */,
                                5182C2391F3139FC0059BA7C /* ServiceWorkerGlobalScope.idl */,
+                               511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */,
+                               511CA67B1F3905710019E074 /* ServiceWorkerJob.h */,
+                               511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */,
+                               511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */,
+                               511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */,
                                5182C2341F3139FC0059BA7C /* ServiceWorkerRegistration.cpp */,
                                5182C2371F3139FC0059BA7C /* ServiceWorkerRegistration.h */,
                                5182C2321F3139FC0059BA7C /* ServiceWorkerRegistration.idl */,
+                               51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */,
+                               511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */,
+                               511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */,
                                51F174FD1F35898800C74950 /* ServiceWorkerUpdateViaCache.h */,
                                51F174FB1F3588D700C74950 /* ServiceWorkerUpdateViaCache.idl */,
                                2E4346330F546A8200B0F1BA /* Worker.cpp */,
                                A584FE2C1863870F00843B10 /* CommandLineAPIModule.h in Headers */,
                                A584FE2618637DAB00843B10 /* CommandLineAPIModuleSource.h in Headers */,
                                6550B6A2099DF0270090D781 /* Comment.h in Headers */,
+                               511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */,
                                57E664FC1E73703300765536 /* CommonCryptoDERUtilities.h in Headers */,
                                E1FE137518402A6700892F13 /* CommonCryptoUtilities.h in Headers */,
                                0F60F32B1DFBB10700416D6C /* CommonVM.h in Headers */,
                                93F198E508245E59001E9ABC /* HTMLDocument.h in Headers */,
                                977B3867122883E900B81FF8 /* HTMLDocumentParser.h in Headers */,
                                93F198E608245E59001E9ABC /* HTMLElement.h in Headers */,
+                               51BEB6391F3B94B0005029B9 /* ServiceWorkerRegistrationOptions.h in Headers */,
                                A17C81230F2A5CF7005DAAEB /* HTMLElementFactory.h in Headers */,
                                977B37241228721700B81FF8 /* HTMLElementStack.h in Headers */,
                                B562DB6017D3CD630010AF96 /* HTMLElementTypeHelpers.h in Headers */,
                                07EE76EC1BE96DB000F89133 /* MockRealtimeVideoSource.h in Headers */,
                                07EE76EF1BEA619800F89133 /* MockRealtimeVideoSourceMac.h in Headers */,
                                CDF2B0171820540700F2B424 /* MockSourceBufferPrivate.h in Headers */,
+                               511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */,
                                CDF2B0191820540700F2B424 /* MockTracks.h in Headers */,
                                C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */,
                                709A01FE1E3D0BDD006B0D4C /* ModuleFetchFailureKind.h in Headers */,
                                07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */,
                                41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */,
                                BC4368E80C226E32005EFB5F /* Rect.h in Headers */,
+                               511CA6841F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.h in Headers */,
                                FD45A958175D414C00C21EC8 /* RectangleShape.h in Headers */,
                                9831AE4A154225C900FE2644 /* ReferrerPolicy.h in Headers */,
                                BCAB418213E356E800D8AAF3 /* Region.h in Headers */,
                                83C1D42F178D5AB500141E68 /* SVGPathSegLinetoAbs.h in Headers */,
                                B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */,
                                83C1D430178D5AB500141E68 /* SVGPathSegLinetoHorizontalAbs.h in Headers */,
+                               511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */,
                                83C1D431178D5AB500141E68 /* SVGPathSegLinetoHorizontalRel.h in Headers */,
                                83C1D432178D5AB500141E68 /* SVGPathSegLinetoRel.h in Headers */,
                                B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */,
                                51741D120B07259A00ED442C /* HistoryItem.cpp in Sources */,
                                5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */,
                                4969B0F213D0B33F00DF3521 /* HitTestingTransformState.cpp in Sources */,
+                               511CA6831F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.cpp in Sources */,
                                2D8287F616E4A0380086BD00 /* HitTestLocation.cpp in Sources */,
                                9307F1D70AF2D59000DBA31A /* HitTestResult.cpp in Sources */,
                                FD31609812B026F700C1A359 /* HRTFDatabase.cpp in Sources */,
                                E1C8BE5D0E8BD15A0064CB7D /* JSWorker.cpp in Sources */,
                                E182568F0EF2B02D00933242 /* JSWorkerGlobalScope.cpp in Sources */,
                                E1C36D340EB0A094007410BC /* JSWorkerGlobalScopeBase.cpp in Sources */,
+                               511CA6791F3904B10019E074 /* ServiceWorkerProvider.cpp in Sources */,
                                E18258AC0EF3CD7000933242 /* JSWorkerGlobalScopeCustom.cpp in Sources */,
                                E1C362F00EAF2AA9007410BC /* JSWorkerLocation.cpp in Sources */,
                                E1271A590EEECDE400F61213 /* JSWorkerNavigator.cpp in Sources */,
                                A8DF4AE80980C42C0052981B /* RenderTableCol.cpp in Sources */,
                                A8DF4AF00980C42C0052981B /* RenderTableRow.cpp in Sources */,
                                A8DF4AED0980C42C0052981B /* RenderTableSection.cpp in Sources */,
+                               511CA67D1F3905A60019E074 /* ServiceWorkerJob.cpp in Sources */,
                                BCEA488B097D93020094C9E4 /* RenderText.cpp in Sources */,
                                AB67D1A8097F3AE300F9392E /* RenderTextControl.cpp in Sources */,
                                083DAEA60F01A7FB00342754 /* RenderTextControlMultiLine.cpp in Sources */,
index 43d96eb..45d8aa0 100644 (file)
@@ -4688,8 +4688,13 @@ URL Document::completeURL(const String& url) const
 
 SessionID Document::sessionID() const
 {
-    auto* page = this->page();
-    return page ? page->sessionID() : SessionID();
+    if (m_sessionID.isValid())
+        return m_sessionID;
+
+    if (auto* page = this->page())
+        m_sessionID = page->sessionID();
+
+    return m_sessionID;
 }
 
 void Document::setPageCacheState(PageCacheState state)
index d41f779..54bc48d 100644 (file)
@@ -45,6 +45,7 @@
 #include "Region.h"
 #include "RenderPtr.h"
 #include "ScriptExecutionContext.h"
+#include "SessionID.h"
 #include "StringWithDirection.h"
 #include "Supplementable.h"
 #include "TextResourceDecoder.h"
@@ -1820,6 +1821,7 @@ private:
 #endif
 
     OrientationNotifier m_orientationNotifier;
+    mutable SessionID m_sessionID;
 
     static bool hasEverCreatedAnAXObjectCache;
 };
index 3522af9..d7f3a5d 100644 (file)
 #include "JSDOMPromiseDeferred.h"
 #include "NavigatorBase.h"
 #include "ScriptExecutionContext.h"
+#include "SecurityOrigin.h"
+#include "ServiceWorkerJob.h"
+#include "ServiceWorkerProvider.h"
+#include "ServiceWorkerRegistrationParameters.h"
 #include "URL.h"
 #include <wtf/RunLoop.h>
 
@@ -46,6 +50,13 @@ ServiceWorkerContainer::ServiceWorkerContainer(ScriptExecutionContext& context,
     m_readyPromise.reject(Exception { UnknownError, ASCIILiteral("serviceWorker.ready() is not yet implemented") });
 }
 
+ServiceWorkerContainer::~ServiceWorkerContainer()
+{
+#ifndef NDEBUG
+    ASSERT(m_creationThread == currentThread());
+#endif
+}
+
 void ServiceWorkerContainer::refEventTarget()
 {
     m_navigator.ref();
@@ -64,7 +75,7 @@ ServiceWorker* ServiceWorkerContainer::controller() const
 void ServiceWorkerContainer::addRegistration(const String& relativeScriptURL, const RegistrationOptions& options, Ref<DeferredPromise>&& promise)
 {
     auto* context = scriptExecutionContext();
-    if (!context) {
+    if (!context || !context->sessionID().isValid()) {
         ASSERT_NOT_REACHED();
         return;
     }
@@ -74,31 +85,44 @@ void ServiceWorkerContainer::addRegistration(const String& relativeScriptURL, co
         return;
     }
 
-    auto scriptURL = context->completeURL(relativeScriptURL);
-    if (!scriptURL.isValid()) {
+    ServiceWorkerRegistrationParameters parameters;
+    parameters.scriptURL = context->completeURL(relativeScriptURL);
+    if (!parameters.scriptURL.isValid()) {
         promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a valid relative script URL") });
         return;
     }
 
     // FIXME: The spec disallows scripts outside of HTTP(S), but we'll likely support app custom URL schemes in WebKit.
-    if (!scriptURL.protocolIsInHTTPFamily()) {
+    if (!parameters.scriptURL.protocolIsInHTTPFamily()) {
         promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose protocol is either HTTP or HTTPS") });
         return;
     }
 
-    String path = scriptURL.path();
+    String path = parameters.scriptURL.path();
     if (path.containsIgnoringASCIICase("%2f") || path.containsIgnoringASCIICase("%5c")) {
         promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose path does not contain '%%2f' or '%%5c'") });
         return;
     }
 
     String scope = options.scope.isEmpty() ? ASCIILiteral("./") : options.scope;
-    auto scopeURL = context->completeURL(scope);
+    if (!scope.isEmpty())
+        parameters.scopeURL = context->completeURL(scope);
+
+    parameters.sessionID = context->sessionID();
+    parameters.clientCreationURL = context->url();
+    parameters.topOrigin = SecurityOriginData::fromSecurityOrigin(context->topOrigin());
+    parameters.options = options;
+
+    scheduleJob(ServiceWorkerJob::createRegisterJob(*this, WTFMove(promise), WTFMove(parameters)));
+}
 
-    // FIXME: At this point, create a Register job and add it to the job queue
-    UNUSED_PARAM(scopeURL);
+void ServiceWorkerContainer::scheduleJob(Ref<ServiceWorkerJob>&& job)
+{
+    ServiceWorkerJob& rawJob = job.get();
+    auto result = m_jobMap.add(rawJob.identifier(), WTFMove(job));
+    ASSERT_UNUSED(result, result.isNewEntry);
 
-    promise->reject(Exception { UnknownError, ASCIILiteral("serviceWorker.register() is not yet implemented") });
+    ServiceWorkerProvider::singleton().scheduleJob(rawJob);
 }
 
 void ServiceWorkerContainer::getRegistration(const String&, Ref<DeferredPromise>&& promise)
@@ -115,6 +139,12 @@ void ServiceWorkerContainer::startMessages()
 {
 }
 
+void ServiceWorkerContainer::jobDidFinish(ServiceWorkerJob& job)
+{
+    auto taken = m_jobMap.take(job.identifier());
+    ASSERT_UNUSED(taken, taken.get() == &job);
+}
+
 const char* ServiceWorkerContainer::activeDOMObjectName() const
 {
     return "ServiceWorkerContainer";
index 38539ee..102c2fc 100644 (file)
 #include "ActiveDOMObject.h"
 #include "DOMPromiseProxy.h"
 #include "EventTarget.h"
+#include "ServiceWorkerJobClient.h"
 #include "ServiceWorkerRegistration.h"
+#include "ServiceWorkerRegistrationOptions.h"
+#include "SessionID.h"
+#include <wtf/Threading.h>
 
 namespace WebCore {
 
@@ -41,16 +45,12 @@ class ServiceWorker;
 enum class ServiceWorkerUpdateViaCache;
 enum class WorkerType;
 
-class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject {
+class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject, public ServiceWorkerJobClient {
 public:
     ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&);
-    virtual ~ServiceWorkerContainer() = default;
+    ~ServiceWorkerContainer();
 
-    struct RegistrationOptions {
-        String scope;
-        WorkerType type;
-        ServiceWorkerUpdateViaCache updateViaCache;
-    };
+    typedef WebCore::RegistrationOptions RegistrationOptions;
 
     ServiceWorker* controller() const;
 
@@ -63,7 +63,13 @@ public:
 
     void startMessages();
 
+    void ref() final { refEventTarget(); }
+    void deref() final { derefEventTarget(); }
+
 private:
+    void scheduleJob(Ref<ServiceWorkerJob>&&);
+    void jobDidFinish(ServiceWorkerJob&) final;
+
     const char* activeDOMObjectName() const final;
     bool canSuspendForDocumentSuspension() const final;
     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
@@ -74,6 +80,12 @@ private:
     ReadyPromise m_readyPromise;
 
     NavigatorBase& m_navigator;
+
+    HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_jobMap;
+
+#ifndef NDEBUG
+    ThreadIdentifier m_creationThread { currentThread() };
+#endif
 };
 
 } // namespace WebCore
diff --git a/Source/WebCore/workers/ServiceWorkerJob.cpp b/Source/WebCore/workers/ServiceWorkerJob.cpp
new file mode 100644 (file)
index 0000000..a978f54
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ServiceWorkerJob.h"
+
+#if ENABLE(SERVICE_WORKER)
+
+#include "JSDOMPromiseDeferred.h"
+#include "ServiceWorkerRegistrationParameters.h"
+
+namespace WebCore {
+
+static std::atomic<uint64_t> currentIdentifier;
+
+ServiceWorkerJob::ServiceWorkerJob(ServiceWorkerJobClient& client, Ref<DeferredPromise>&& promise, ServiceWorkerRegistrationParameters&& parameters)
+    : m_client(client)
+    , m_promise(WTFMove(promise))
+    , m_identifier(++currentIdentifier)
+{
+    m_registrationParameters = std::make_unique<ServiceWorkerRegistrationParameters>(WTFMove(parameters));
+}
+
+ServiceWorkerJob::~ServiceWorkerJob()
+{
+    ASSERT(currentThread() == m_creationThread);
+}
+
+void ServiceWorkerJob::failedWithException(Exception&& exception)
+{
+    ASSERT(currentThread() == m_creationThread);
+
+    ASSERT(!m_completed);
+    m_promise->reject(WTFMove(exception));
+    m_client->jobDidFinish(*this);
+    m_completed = true;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerJob.h b/Source/WebCore/workers/ServiceWorkerJob.h
new file mode 100644 (file)
index 0000000..d1459ea
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+#include "ServiceWorkerJobClient.h"
+#include <wtf/RefPtr.h>
+#include <wtf/ThreadSafeRefCounted.h>
+#include <wtf/Threading.h>
+
+namespace WebCore {
+
+class DeferredPromise;
+class Exception;
+struct ServiceWorkerRegistrationParameters;
+
+class ServiceWorkerJob : public ThreadSafeRefCounted<ServiceWorkerJob> {
+public:
+    static Ref<ServiceWorkerJob> createRegisterJob(ServiceWorkerJobClient& client, Ref<DeferredPromise>&& promise, ServiceWorkerRegistrationParameters&& parameters)
+    {
+        return adoptRef(*new ServiceWorkerJob(client, WTFMove(promise), WTFMove(parameters)));
+    }
+
+    ~ServiceWorkerJob();
+
+    WEBCORE_EXPORT void failedWithException(Exception&&);
+
+    uint64_t identifier() const { return m_identifier; }
+
+private:
+    ServiceWorkerJob(ServiceWorkerJobClient&, Ref<DeferredPromise>&&, ServiceWorkerRegistrationParameters&&);
+
+    Ref<ServiceWorkerJobClient> m_client;
+    std::unique_ptr<ServiceWorkerRegistrationParameters> m_registrationParameters;
+    Ref<DeferredPromise> m_promise;
+
+    bool m_completed { false };
+    uint64_t m_identifier;
+
+#if !ASSERT_DISABLED
+    ThreadIdentifier m_creationThread { currentThread() };
+#endif
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
+
diff --git a/Source/WebCore/workers/ServiceWorkerJobClient.h b/Source/WebCore/workers/ServiceWorkerJobClient.h
new file mode 100644 (file)
index 0000000..239e849
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+namespace WebCore {
+
+class ServiceWorkerJob;
+
+class ServiceWorkerJobClient {
+public:
+    virtual ~ServiceWorkerJobClient() { };
+
+    virtual void jobDidFinish(ServiceWorkerJob&) = 0;
+
+    virtual void ref() = 0;
+    virtual void deref() = 0;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerProvider.cpp b/Source/WebCore/workers/ServiceWorkerProvider.cpp
new file mode 100644 (file)
index 0000000..27d247c
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ServiceWorkerProvider.h"
+
+#if ENABLE(SERVICE_WORKER)
+
+namespace WebCore {
+
+static ServiceWorkerProvider* sharedProvider;
+
+ServiceWorkerProvider& ServiceWorkerProvider::singleton()
+{
+    RELEASE_ASSERT(sharedProvider);
+    return *sharedProvider;
+}
+
+void ServiceWorkerProvider::setSharedProvider(ServiceWorkerProvider& newProvider)
+{
+    sharedProvider = &newProvider;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerProvider.h b/Source/WebCore/workers/ServiceWorkerProvider.h
new file mode 100644 (file)
index 0000000..ea934ca
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+namespace WebCore {
+
+class ServiceWorkerJob;
+
+class WEBCORE_EXPORT ServiceWorkerProvider {
+public:
+    virtual ~ServiceWorkerProvider() { }
+
+    WEBCORE_EXPORT static ServiceWorkerProvider& singleton();
+    WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
+
+    virtual void scheduleJob(ServiceWorkerJob&) = 0;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerRegistrationOptions.h b/Source/WebCore/workers/ServiceWorkerRegistrationOptions.h
new file mode 100644 (file)
index 0000000..d4799e5
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+enum class ServiceWorkerUpdateViaCache;
+enum class WorkerType;
+
+struct RegistrationOptions {
+    String scope;
+    WorkerType type;
+    ServiceWorkerUpdateViaCache updateViaCache;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerRegistrationParameters.cpp b/Source/WebCore/workers/ServiceWorkerRegistrationParameters.cpp
new file mode 100644 (file)
index 0000000..61eb788
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ServiceWorkerRegistrationParameters.h"
+
+#if ENABLE(SERVICE_WORKER)
+
+namespace WebCore {
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebCore/workers/ServiceWorkerRegistrationParameters.h b/Source/WebCore/workers/ServiceWorkerRegistrationParameters.h
new file mode 100644 (file)
index 0000000..ba7434a
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+#include "SecurityOriginData.h"
+#include "ServiceWorkerRegistrationOptions.h"
+#include "SessionID.h"
+#include "URL.h"
+
+namespace WebCore {
+
+struct ServiceWorkerRegistrationParameters {
+    SessionID sessionID;
+    URL scriptURL;
+    URL clientCreationURL;
+    SecurityOriginData topOrigin;
+    URL scopeURL;
+    RegistrationOptions options;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
index 334f668..7e31d52 100644 (file)
@@ -522,6 +522,7 @@ set(WebKit2_SOURCES
     WebProcess/Plugins/Netscape/NetscapePluginNone.cpp
     WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
 
+    WebProcess/Storage/WebServiceWorkerProvider.cpp
     WebProcess/Storage/WebToStorageProcessConnection.cpp
 
     WebProcess/UserContent/WebUserContentController.cpp
index 26ced79..2ac0c97 100644 (file)
@@ -1,3 +1,22 @@
+2017-08-10  Brady Eidson  <beidson@apple.com>
+
+        Add ServiceWorkerJob.
+        https://bugs.webkit.org/show_bug.cgi?id=175241
+
+        Reviewed by Tim Horton.
+
+        * CMakeLists.txt:
+        * WebKit.xcodeproj/project.pbxproj:
+
+        * WebProcess/Storage/WebServiceWorkerProvider.cpp: Added.
+        (WebKit::WebServiceWorkerProvider::singleton):
+        (WebKit::WebServiceWorkerProvider::WebServiceWorkerProvider):
+        (WebKit::WebServiceWorkerProvider::scheduleJob):
+        * WebProcess/Storage/WebServiceWorkerProvider.h: Added.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::initializeWebProcess):
+
 2017-08-10  Tim Horton  <timothy_horton@apple.com>
 
         Remove some unused lambda captures so that WebKit builds with -Wunused-lambda-capture
index 4e3c234..909a5ec 100644 (file)
                51ACBBA1127A8F2C00D203B9 /* WebContextMenuProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51ACBB9F127A8F2C00D203B9 /* WebContextMenuProxyMac.mm */; };
                51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */; };
                51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */; };
+               51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */; };
                51C0C9741DDD76000032CAD3 /* IconLoadingDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */; };
                51C0C9751DDD76030032CAD3 /* IconLoadingDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */; };
                51CD1C5D1B3493AF00142CA5 /* WKSecurityOriginRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51CD1C591B3493A900142CA5 /* WKSecurityOriginRef.cpp */; };
                51ACC9351628064800342550 /* NetworkProcessMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkProcessMessages.h; sourceTree = "<group>"; };
                51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnvironmentUtilities.cpp; path = unix/EnvironmentUtilities.cpp; sourceTree = "<group>"; };
                51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnvironmentUtilities.h; path = unix/EnvironmentUtilities.h; sourceTree = "<group>"; };
+               51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebServiceWorkerProvider.cpp; sourceTree = "<group>"; };
+               51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebServiceWorkerProvider.h; sourceTree = "<group>"; };
                51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IconLoadingDelegate.h; sourceTree = "<group>"; };
                51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IconLoadingDelegate.mm; sourceTree = "<group>"; };
                51C0C9791DDD78540032CAD3 /* _WKLinkIconParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKLinkIconParameters.h; sourceTree = "<group>"; };
                5118E9981F295259003EF9F5 /* Storage */ = {
                        isa = PBXGroup;
                        children = (
+                               51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */,
+                               51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */,
                                5118E9991F295259003EF9F5 /* WebToStorageProcessConnection.cpp */,
                                5118E99A1F295259003EF9F5 /* WebToStorageProcessConnection.h */,
                        );
                                BCE0E425168B7A280057E66A /* WebProcessSupplement.h in Headers */,
                                1A1E093418861D3800D2DC49 /* WebProgressTrackerClient.h in Headers */,
                                512F589D12A8838800629530 /* WebProtectionSpace.h in Headers */,
+                               51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */,
                                37948404150C350600E52CE9 /* WebRenderLayer.h in Headers */,
                                3760881F150413E900FC82C7 /* WebRenderObject.h in Headers */,
                                510AFFBA16542048001BA05E /* WebResourceLoader.h in Headers */,
                                2DA944A11884E4F000ED86DB /* WebIOSEventFactory.mm in Sources */,
                                C0337DD3127A2A0E008FF4F4 /* WebKeyboardEvent.cpp in Sources */,
                                1A6280F31919982A006AD9F9 /* WebKit.m in Sources */,
+                               51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */,
                                BC9BA5041697C45300E44616 /* WebKit2Initialize.cpp in Sources */,
                                465250E61ECF52DC002025CB /* WebKit2InitializeCocoa.mm in Sources */,
                                51FB08FF1639DE1A00EC324A /* WebLoaderStrategy.cpp in Sources */,
diff --git a/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp b/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp
new file mode 100644 (file)
index 0000000..14e7d4c
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebServiceWorkerProvider.h"
+
+#if ENABLE(SERVICE_WORKER)
+
+#include <WebCore/Exception.h>
+#include <WebCore/ExceptionCode.h>
+#include <WebCore/ServiceWorkerJob.h>
+#include <wtf/text/WTFString.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebServiceWorkerProvider& WebServiceWorkerProvider::singleton()
+{
+    static NeverDestroyed<WebServiceWorkerProvider> provider;
+    return provider;
+}
+
+WebServiceWorkerProvider::WebServiceWorkerProvider()
+{
+}
+
+void WebServiceWorkerProvider::scheduleJob(ServiceWorkerJob& job)
+{
+    job.failedWithException(Exception { UnknownError, ASCIILiteral("serviceWorker job scheduling is not yet implemented") });
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(SERVICE_WORKER)
diff --git a/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h b/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h
new file mode 100644 (file)
index 0000000..b724aaf
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+#include <WebCore/ServiceWorkerProvider.h>
+#include <wtf/NeverDestroyed.h>
+
+namespace WebKit {
+
+class WebServiceWorkerProvider : public WebCore::ServiceWorkerProvider {
+public:
+    static WebServiceWorkerProvider& singleton();
+
+private:
+    friend NeverDestroyed<WebServiceWorkerProvider>;
+    WebServiceWorkerProvider();
+
+    void scheduleJob(WebCore::ServiceWorkerJob&) final;
+
+}; // class WebServiceWorkerProvider
+
+} // namespace WebKit
+
+#endif // ENABLE(SERVICE_WORKER)
index 9d16b50..3782286 100644 (file)
@@ -63,6 +63,7 @@
 #include "WebProcessPoolMessages.h"
 #include "WebProcessProxyMessages.h"
 #include "WebResourceLoadStatisticsStoreMessages.h"
+#include "WebServiceWorkerProvider.h"
 #include "WebSocketStream.h"
 #include "WebToStorageProcessConnection.h"
 #include "WebsiteData.h"
@@ -392,6 +393,10 @@ void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters)
     GamepadProvider::singleton().setSharedProvider(WebGamepadProvider::singleton());
 #endif
 
+#if ENABLE(SERVICE_WORKER)
+    ServiceWorkerProvider::setSharedProvider(WebServiceWorkerProvider::singleton());
+#endif
+
 #if ENABLE(WEBASSEMBLY)
     JSC::Wasm::enableFastMemory();
 #endif