Changeset 220924 in webkit


Ignore:
Timestamp:
Aug 18, 2017 11:52:43 AM (7 years ago)
Author:
beidson@apple.com
Message:

Bounce ServiceWorker jobs to the Storage Process.
https://bugs.webkit.org/show_bug.cgi?id=175650

Reviewed by Andy Estes.

LayoutTests/imported/w3c:

Now that the serviceWorker.register() call is asynchronous, update a whole bunch of test results.

  • web-platform-tests/FileAPI/historical.https-expected.txt:
  • web-platform-tests/background-fetch/interfaces-worker.https-expected.txt:
  • web-platform-tests/fetch/api/policies/referrer-no-referrer-service-worker.https-expected.txt:
  • web-platform-tests/fetch/api/policies/referrer-origin-service-worker.https-expected.txt:
  • web-platform-tests/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https-expected.txt:
  • web-platform-tests/fetch/api/policies/referrer-unsafe-url-service-worker.https-expected.txt:
  • web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt:
  • web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt:
  • web-platform-tests/streams/byte-length-queuing-strategy.serviceworker.https-expected.txt:
  • web-platform-tests/streams/count-queuing-strategy.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/close-propagation-backward.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/close-propagation-forward.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/error-propagation-backward.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/error-propagation-forward.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/flow-control.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/general.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/multiple-propagation.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/pipe-through.serviceworker.https-expected.txt:
  • web-platform-tests/streams/piping/transform-streams.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-byte-streams/general.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/bad-strategies.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/brand-checks.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/cancel.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/default-reader.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/floating-point-total-queue-size.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/general.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/pipe-through.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/readable-stream-reader.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt:
  • web-platform-tests/streams/readable-streams/templated.serviceworker.https-expected.txt:

Source/WebCore:

No new tests (Covered by both changes and consistencies in existing tests)

This lays the groundwork for the SW job queue being in the StorageProcess by actually
setting up some objects for IPC communication and actually sending things over the wire.

The main point of IPC is the WebCore abstract base class "SWServer::Connection"

A collection of them will soon be managed by the SWServer itself in the StorageProcess.

That object will be the stand-in for IPC on both the WebProcess and StorageProcess side.

Currently, any job that we try to schedule still immediately rejects (though now it does
so asynchronously instead of synchronously).

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • dom/ExceptionData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.

(WebCore::ExceptionData::toException const):
(WebCore::ExceptionData::encode const):
(WebCore::ExceptionData::decode):

  • workers/service/ServiceWorkerContainer.cpp:

(WebCore::ServiceWorkerContainer::addRegistration):
(WebCore::ServiceWorkerContainer::scheduleJob):

  • workers/service/ServiceWorkerContainer.h:
  • workers/service/ServiceWorkerJob.cpp:

(WebCore::ServiceWorkerJob::failedWithException):
(WebCore::ServiceWorkerJob::data const):

  • workers/service/ServiceWorkerJob.h:
  • workers/service/ServiceWorkerJobData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.

(WebCore::ServiceWorkerJobData::encode const):
(WebCore::ServiceWorkerJobData::decode):

  • workers/service/ServiceWorkerJobType.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
  • workers/service/ServiceWorkerProvider.h:
  • workers/service/ServiceWorkerRegistrationParameters.h:
  • workers/service/server/SWServer.cpp: Copied from Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp.

(WebCore::SWServer::Connection::scheduleJob):
(WebCore::SWServer::Connection::jobRejected):

  • workers/service/server/SWServer.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.

(WebCore::SWServer::Connection::~Connection):

Source/WebKit:

  • CMakeLists.txt:
  • DerivedSources.make:
  • WebKit.xcodeproj/project.pbxproj:
  • Platform/Logging.h:
  • StorageProcess/StorageToWebProcessConnection.cpp:

(WebKit::StorageToWebProcessConnection::didReceiveMessage):
(WebKit::StorageToWebProcessConnection::didClose):
(WebKit::StorageToWebProcessConnection::establishSWServerConnection):
(WebKit::StorageToWebProcessConnection::removeSWServerConnection):
(WebKit::StorageToWebProcessConnection::establishIDBConnectionToServer):

  • StorageProcess/StorageToWebProcessConnection.h:
  • StorageProcess/StorageToWebProcessConnection.messages.in:
  • WebProcess/Storage/WebSWServerConnection.cpp: Added.

(WebKit::WebSWServerConnection::WebSWServerConnection):
(WebKit::WebSWServerConnection::~WebSWServerConnection):
(WebKit::WebSWServerConnection::disconnectedFromWebProcess):
(WebKit::WebSWServerConnection::scheduleJob):
(WebKit::WebSWServerConnection::scheduleStorageJob):

  • WebProcess/Storage/WebSWServerConnection.h: Copied from Source/WebCore/workers/service/ServiceWorkerJob.h.

(WebKit::WebSWServerConnection::create):
(WebKit::WebSWServerConnection::identifier const):

  • WebProcess/Storage/WebSWServerConnection.messages.in: Copied from Source/WebKit/StorageProcess/StorageToWebProcessConnection.messages.in.
  • WebProcess/Storage/WebServiceWorkerProvider.cpp:

(WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession):
(WebKit::WebServiceWorkerProvider::scheduleJob): Deleted.

  • WebProcess/Storage/WebServiceWorkerProvider.h:
  • WebProcess/Storage/WebToStorageProcessConnection.cpp:

(WebKit::WebToStorageProcessConnection::didReceiveMessage):
(WebKit::WebToStorageProcessConnection::serviceWorkerConnectionForSession):

  • WebProcess/Storage/WebToStorageProcessConnection.h:

LayoutTests:

Service worker tests will always be dumpAsText and always be asynchronous.

  • http/tests/workers/service/basic-register.html:
  • http/tests/workers/service/resources/basic-register.js:
  • http/tests/workers/service/resources/sw-test-pre.js: Added.
Location:
trunk
Files:
3 added
66 edited
7 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r220922 r220924  
     12017-08-18  Brady Eidson  <beidson@apple.com>
     2
     3        Bounce ServiceWorker jobs to the Storage Process.
     4        https://bugs.webkit.org/show_bug.cgi?id=175650
     5
     6        Reviewed by Andy Estes.
     7
     8        Service worker tests will always be dumpAsText and always be asynchronous.
     9
     10        * http/tests/workers/service/basic-register.html:
     11        * http/tests/workers/service/resources/basic-register.js:
     12        * http/tests/workers/service/resources/sw-test-pre.js: Added.
     13
    1142017-08-18  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/LayoutTests/http/tests/workers/service/basic-register.html

    r220539 r220924  
    11<html>
    22<head>
    3 <script src="../../resources/js-test-pre.js"></script>
     3<script src="resources/sw-test-pre.js"></script>
    44</head>
    55<body>
  • trunk/LayoutTests/http/tests/workers/service/resources/basic-register.js

    r220539 r220924  
    11function done()
    22{
    3     finishJSTest();
     3    finishSWTest();
    44}
    55
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r220917 r220924  
     12017-08-18  Brady Eidson  <beidson@apple.com>
     2
     3        Bounce ServiceWorker jobs to the Storage Process.
     4        https://bugs.webkit.org/show_bug.cgi?id=175650
     5
     6        Reviewed by Andy Estes.
     7
     8        Now that the serviceWorker.register() call is asynchronous, update a whole bunch of test results.
     9
     10        * web-platform-tests/FileAPI/historical.https-expected.txt:
     11        * web-platform-tests/background-fetch/interfaces-worker.https-expected.txt:
     12        * web-platform-tests/fetch/api/policies/referrer-no-referrer-service-worker.https-expected.txt:
     13        * web-platform-tests/fetch/api/policies/referrer-origin-service-worker.https-expected.txt:
     14        * web-platform-tests/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https-expected.txt:
     15        * web-platform-tests/fetch/api/policies/referrer-unsafe-url-service-worker.https-expected.txt:
     16        * web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https-expected.txt:
     17        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt:
     18        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt:
     19        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt:
     20        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt:
     21        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt:
     22        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt:
     23        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt:
     24        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt:
     25        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt:
     26        * web-platform-tests/streams/byte-length-queuing-strategy.serviceworker.https-expected.txt:
     27        * web-platform-tests/streams/count-queuing-strategy.serviceworker.https-expected.txt:
     28        * web-platform-tests/streams/piping/close-propagation-backward.serviceworker.https-expected.txt:
     29        * web-platform-tests/streams/piping/close-propagation-forward.serviceworker.https-expected.txt:
     30        * web-platform-tests/streams/piping/error-propagation-backward.serviceworker.https-expected.txt:
     31        * web-platform-tests/streams/piping/error-propagation-forward.serviceworker.https-expected.txt:
     32        * web-platform-tests/streams/piping/flow-control.serviceworker.https-expected.txt:
     33        * web-platform-tests/streams/piping/general.serviceworker.https-expected.txt:
     34        * web-platform-tests/streams/piping/multiple-propagation.serviceworker.https-expected.txt:
     35        * web-platform-tests/streams/piping/pipe-through.serviceworker.https-expected.txt:
     36        * web-platform-tests/streams/piping/transform-streams.serviceworker.https-expected.txt:
     37        * web-platform-tests/streams/readable-byte-streams/general.serviceworker.https-expected.txt:
     38        * web-platform-tests/streams/readable-streams/bad-strategies.serviceworker.https-expected.txt:
     39        * web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt:
     40        * web-platform-tests/streams/readable-streams/brand-checks.serviceworker.https-expected.txt:
     41        * web-platform-tests/streams/readable-streams/cancel.serviceworker.https-expected.txt:
     42        * web-platform-tests/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https-expected.txt:
     43        * web-platform-tests/streams/readable-streams/default-reader.serviceworker.https-expected.txt:
     44        * web-platform-tests/streams/readable-streams/floating-point-total-queue-size.serviceworker.https-expected.txt:
     45        * web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt:
     46        * web-platform-tests/streams/readable-streams/general.serviceworker.https-expected.txt:
     47        * web-platform-tests/streams/readable-streams/pipe-through.serviceworker.https-expected.txt:
     48        * web-platform-tests/streams/readable-streams/readable-stream-reader.serviceworker.https-expected.txt:
     49        * web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt:
     50        * web-platform-tests/streams/readable-streams/templated.serviceworker.https-expected.txt:
     51
    1522017-08-18  Youenn Fablet  <youenn@apple.com>
    253
  • trunk/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32PASS "toNativeLineEndings" should not be supported
  • trunk/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces-worker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21idlharness test
    32
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-no-referrer-service-worker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Fetch in service worker: referrer with no-referrer policy assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-service-worker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Fetch in service worker: referrer with no-referrer policy assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Fetch in service worker: referrer with origin-when-cross-origin policy assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-unsafe-url-service-worker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Fetch in worker: referrer with unsafe-url policy assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.add and Cache.addAll assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.delete assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.keys assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.match assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.matchAll assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Cache.put assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL CacheStorage.keys assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL CacheStorage.match assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL CacheStorage assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/byte-length-queuing-strategy.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/count-queuing-strategy.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/close-propagation-backward.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/close-propagation-forward.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/error-propagation-backward.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/error-propagation-forward.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/flow-control.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/general.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/multiple-propagation.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/pipe-through.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/piping/transform-streams.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-strategies.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/brand-checks.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/cancel.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/default-reader.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/floating-point-total-queue-size.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/general.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/pipe-through.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/readable-stream-reader.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/templated.serviceworker.https-expected.txt

    r220344 r220924  
    1 CONSOLE MESSAGE: line 153: TypeError: undefined is not an object (evaluating 'registration.unregister')
    21
    32FAIL Service worker test setup assert_unreached: unregister should not fail: serviceWorker.getRegistration() is not yet implemented Reached unreachable code
  • trunk/Source/WebCore/CMakeLists.txt

    r220916 r220924  
    122122    "${WEBCORE_DIR}/workers"
    123123    "${WEBCORE_DIR}/workers/service"
     124    "${WEBCORE_DIR}/workers/service/server"
    124125    "${WEBCORE_DIR}/xml"
    125126    "${WEBCORE_DIR}/xml/parser"
     
    29982999    workers/service/ServiceWorkerRegistrationParameters.cpp
    29993000
     3001    workers/service/server/SWServer.cpp
     3002
    30003003    xml/DOMParser.cpp
    30013004    xml/NativeXPathNSResolver.cpp
  • trunk/Source/WebCore/ChangeLog

    r220922 r220924  
     12017-08-18  Brady Eidson  <beidson@apple.com>
     2
     3        Bounce ServiceWorker jobs to the Storage Process.
     4        https://bugs.webkit.org/show_bug.cgi?id=175650
     5
     6        Reviewed by Andy Estes.
     7
     8        No new tests (Covered by both changes and consistencies in existing tests)
     9
     10        This lays the groundwork for the SW job queue being in the StorageProcess by actually
     11        setting up some objects for IPC communication and actually sending things over the wire.
     12
     13        The main point of IPC is the WebCore abstract base class "SWServer::Connection"
     14
     15        A collection of them will soon be managed by the SWServer itself in the StorageProcess.
     16
     17        That object will be the stand-in for IPC on both the WebProcess and StorageProcess side.
     18
     19        Currently, any job that we try to schedule still immediately rejects (though now it does
     20        so asynchronously instead of synchronously).
     21
     22        * CMakeLists.txt:
     23        * WebCore.xcodeproj/project.pbxproj:
     24
     25        * dom/ExceptionData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
     26        (WebCore::ExceptionData::toException const):
     27        (WebCore::ExceptionData::encode const):
     28        (WebCore::ExceptionData::decode):
     29
     30        * workers/service/ServiceWorkerContainer.cpp:
     31        (WebCore::ServiceWorkerContainer::addRegistration):
     32        (WebCore::ServiceWorkerContainer::scheduleJob):
     33        * workers/service/ServiceWorkerContainer.h:
     34
     35        * workers/service/ServiceWorkerJob.cpp:
     36        (WebCore::ServiceWorkerJob::failedWithException):
     37        (WebCore::ServiceWorkerJob::data const):
     38        * workers/service/ServiceWorkerJob.h:
     39
     40        * workers/service/ServiceWorkerJobData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
     41        (WebCore::ServiceWorkerJobData::encode const):
     42        (WebCore::ServiceWorkerJobData::decode):
     43
     44        * workers/service/ServiceWorkerJobType.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
     45
     46        * workers/service/ServiceWorkerProvider.h:
     47
     48        * workers/service/ServiceWorkerRegistrationParameters.h:
     49
     50        * workers/service/server/SWServer.cpp: Copied from Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp.
     51        (WebCore::SWServer::Connection::scheduleJob):
     52        (WebCore::SWServer::Connection::jobRejected):
     53        * workers/service/server/SWServer.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
     54        (WebCore::SWServer::Connection::~Connection):
     55
    1562017-08-18  Chris Dumez  <cdumez@apple.com>
    257
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r220917 r220924  
    23072307                51771DFE1BDB485000CAE8E4 /* MemoryObjectStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51771DFC1BDB475600CAE8E4 /* MemoryObjectStore.cpp */; };
    23082308                51771DFF1BDB485000CAE8E4 /* MemoryObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51771DFD1BDB475600CAE8E4 /* MemoryObjectStore.h */; };
     2309                517A52F01F47535B00DCDC0A /* SWServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A52EE1F47535900DCDC0A /* SWServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2310                517A52F11F4754E700DCDC0A /* SWServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A52EF1F47535900DCDC0A /* SWServer.cpp */; };
    23092311                517A63C31B74318700E7DCDC /* KeyedDecoderCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A63BF1B74317E00E7DCDC /* KeyedDecoderCF.cpp */; };
    23102312                517A63C41B74318B00E7DCDC /* KeyedEncoderCF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A63C11B74317E00E7DCDC /* KeyedEncoderCF.cpp */; };
     
    24782480                51F1756B1F3EBC8300C74950 /* ServiceWorkerRegistrationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F175481F3EBC0C00C74950 /* ServiceWorkerRegistrationParameters.h */; };
    24792481                51F1756C1F3EBC8300C74950 /* ServiceWorkerUpdateViaCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F175471F3EBC0C00C74950 /* ServiceWorkerUpdateViaCache.h */; };
     2482                51F645621F45398F00B54DED /* ExceptionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645601F45398B00B54DED /* ExceptionData.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2483                51F645691F4539B900B54DED /* ServiceWorkerJobData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645661F45399F00B54DED /* ServiceWorkerJobData.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2484                51F6456A1F4539C000B54DED /* ServiceWorkerJobType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645651F45399F00B54DED /* ServiceWorkerJobType.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24802485                51F798EF1BE880E7008AE491 /* IDBIndexInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F798EB1BE880D3008AE491 /* IDBIndexInfo.cpp */; };
    24812486                51F798F01BE880E7008AE491 /* IDBIndexInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F798EC1BE880D3008AE491 /* IDBIndexInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1007010075                51771DFC1BDB475600CAE8E4 /* MemoryObjectStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryObjectStore.cpp; sourceTree = "<group>"; };
    1007110076                51771DFD1BDB475600CAE8E4 /* MemoryObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryObjectStore.h; sourceTree = "<group>"; };
     10077                517A52EE1F47535900DCDC0A /* SWServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWServer.h; sourceTree = "<group>"; };
     10078                517A52EF1F47535900DCDC0A /* SWServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWServer.cpp; sourceTree = "<group>"; };
    1007210079                517A63BF1B74317E00E7DCDC /* KeyedDecoderCF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyedDecoderCF.cpp; sourceTree = "<group>"; };
    1007310080                517A63C01B74317E00E7DCDC /* KeyedDecoderCF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyedDecoderCF.h; sourceTree = "<group>"; };
     
    1024410251                51F1755A1F3EBC0C00C74950 /* ServiceWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorker.h; sourceTree = "<group>"; };
    1024510252                51F1755B1F3EBC0C00C74950 /* ServiceWorker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorker.cpp; sourceTree = "<group>"; };
     10253                51F645601F45398B00B54DED /* ExceptionData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExceptionData.h; sourceTree = "<group>"; };
     10254                51F645651F45399F00B54DED /* ServiceWorkerJobType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJobType.h; sourceTree = "<group>"; };
     10255                51F645661F45399F00B54DED /* ServiceWorkerJobData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJobData.h; sourceTree = "<group>"; };
    1024610256                51F6A3D50663BF04004D2919 /* HTMLCanvasElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLCanvasElement.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
    1024710257                51F6A3D60663BF04004D2919 /* HTMLCanvasElement.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = HTMLCanvasElement.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
     
    1860718617                        usesTabs = 0;
    1860818618                };
     18619                517A52EC1F47532D00DCDC0A /* server */ = {
     18620                        isa = PBXGroup;
     18621                        children = (
     18622                                517A52EF1F47535900DCDC0A /* SWServer.cpp */,
     18623                                517A52EE1F47535900DCDC0A /* SWServer.h */,
     18624                        );
     18625                        path = server;
     18626                        sourceTree = "<group>";
     18627                };
    1860918628                5182C24C1F3142090059BA7C /* ServiceWorkers */ = {
    1861018629                        isa = PBXGroup;
     
    1868718706                        isa = PBXGroup;
    1868818707                        children = (
     18708                                517A52EC1F47532D00DCDC0A /* server */,
    1868918709                                51F1755B1F3EBC0C00C74950 /* ServiceWorker.cpp */,
    1869018710                                51F1755A1F3EBC0C00C74950 /* ServiceWorker.h */,
     
    1869918719                                51F175511F3EBC0C00C74950 /* ServiceWorkerJob.h */,
    1870018720                                51F175501F3EBC0C00C74950 /* ServiceWorkerJobClient.h */,
     18721                                51F645661F45399F00B54DED /* ServiceWorkerJobData.h */,
     18722                                51F645651F45399F00B54DED /* ServiceWorkerJobType.h */,
    1870118723                                51F1754F1F3EBC0C00C74950 /* ServiceWorkerProvider.cpp */,
    1870218724                                51F1754E1F3EBC0C00C74950 /* ServiceWorkerProvider.h */,
     
    2579925821                                93D196321D6CAB8200FC7E47 /* Exception.h */,
    2580025822                                935FBCF109BA143B00E230B1 /* ExceptionCode.h */,
     25823                                51F645601F45398B00B54DED /* ExceptionData.h */,
    2580125824                                93D196301D6CAB7600FC7E47 /* ExceptionOr.h */,
    2580225825                                E47E276716036EDC00EE2AFB /* ExtensionStyleSheets.cpp */,
     
    2729427317                                93D196331D6CAB8200FC7E47 /* Exception.h in Headers */,
    2729527318                                935FBCF209BA143B00E230B1 /* ExceptionCode.h in Headers */,
     27319                                51F645621F45398F00B54DED /* ExceptionData.h in Headers */,
    2729627320                                93D196311D6CAB7600FC7E47 /* ExceptionOr.h in Headers */,
    2729727321                                31DCDF441DA1C45400EA5B93 /* ExtendedColor.h in Headers */,
     
    2879528819                                F55B3DC61251F12D003EF269 /* MonthInputType.h in Headers */,
    2879628820                                85031B460A44EFC700F992E0 /* MouseEvent.h in Headers */,
     28821                                517A52F01F47535B00DCDC0A /* SWServer.h in Headers */,
    2879728822                                83765F951DAC522F00C06537 /* MouseEventInit.h in Headers */,
    2879828823                                935C476309AC4CE600A6AAB4 /* MouseEventWithHitTestResults.h in Headers */,
     
    2944629471                                51F175631F3EBC8300C74950 /* ServiceWorkerJob.h in Headers */,
    2944729472                                51F175641F3EBC8300C74950 /* ServiceWorkerJobClient.h in Headers */,
     29473                                51F645691F4539B900B54DED /* ServiceWorkerJobData.h in Headers */,
     29474                                51F6456A1F4539C000B54DED /* ServiceWorkerJobType.h in Headers */,
    2944829475                                51F175661F3EBC8300C74950 /* ServiceWorkerProvider.h in Headers */,
    2944929476                                51F175681F3EBC8300C74950 /* ServiceWorkerRegistration.h in Headers */,
     
    3190431931                                1221E05D1C02B444006A1A00 /* JSDocumentAnimation.cpp in Sources */,
    3190531932                                49C7BA8D1042F5B10009D447 /* JSDocumentCustom.cpp in Sources */,
     31933                                517A52F11F4754E700DCDC0A /* SWServer.cpp in Sources */,
    3190631934                                E3B7C0631DC34160001FB0B8 /* JSDocumentDOMJIT.cpp in Sources */,
    3190731935                                1A494EDE0A123F4C00FDAFC1 /* JSDocumentFragment.cpp in Sources */,
  • trunk/Source/WebCore/dom/ExceptionData.h

    r220922 r220924  
    2626#pragma once
    2727
    28 #if ENABLE(SERVICE_WORKER)
     28#include "Exception.h"
     29#include <wtf/text/WTFString.h>
    2930
    3031namespace WebCore {
    3132
    32 class ServiceWorkerJob;
     33struct ExceptionData {
     34    ExceptionCode code;
     35    String message;
    3336
    34 class WEBCORE_EXPORT ServiceWorkerProvider {
    35 public:
    36     virtual ~ServiceWorkerProvider() { }
     37    template<class Encoder> void encode(Encoder&) const;
     38    template<class Decoder> static bool decode(Decoder&, ExceptionData&);
    3739
    38     WEBCORE_EXPORT static ServiceWorkerProvider& singleton();
    39     WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
    40 
    41     virtual void scheduleJob(ServiceWorkerJob&) = 0;
     40    Exception toException() const
     41    {
     42        return Exception { code, String { message } };
     43    }
    4244};
    4345
     46template<class Encoder>
     47void ExceptionData::encode(Encoder& encoder) const
     48{
     49    encoder.encodeEnum(code);
     50    encoder << message;
     51}
     52
     53template<class Decoder>
     54bool ExceptionData::decode(Decoder& decoder, ExceptionData& data)
     55{
     56    if (!decoder.decodeEnum(data.code))
     57        return false;
     58
     59    if (!decoder.decode(data.message))
     60        return false;
     61
     62    return true;
     63}
     64
    4465} // namespace WebCore
    45 
    46 #endif // ENABLE(SERVICE_WORKER)
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp

    r220623 r220924  
    8181    }
    8282
     83    if (!m_serverConnection)
     84        m_serverConnection = &ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(context->sessionID());
     85
    8386    if (relativeScriptURL.isEmpty()) {
    8487        promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() cannot be called with an empty script URL") });
     
    109112        parameters.scopeURL = context->completeURL(scope);
    110113
    111     parameters.sessionID = context->sessionID();
    112114    parameters.clientCreationURL = context->url();
    113115    parameters.topOrigin = SecurityOriginData::fromSecurityOrigin(context->topOrigin());
     
    119121void ServiceWorkerContainer::scheduleJob(Ref<ServiceWorkerJob>&& job)
    120122{
     123    ASSERT(m_serverConnection);
     124
    121125    ServiceWorkerJob& rawJob = job.get();
    122126    auto result = m_jobMap.add(rawJob.identifier(), WTFMove(job));
    123127    ASSERT_UNUSED(result, result.isNewEntry);
    124128
    125     ServiceWorkerProvider::singleton().scheduleJob(rawJob);
     129    m_serverConnection->scheduleJob(rawJob);
    126130}
    127131
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h

    r220887 r220924  
    3131#include "DOMPromiseProxy.h"
    3232#include "EventTarget.h"
     33#include "SWServer.h"
    3334#include "ServiceWorkerJobClient.h"
    3435#include "ServiceWorkerRegistration.h"
     
    8283    NavigatorBase& m_navigator;
    8384
     85    RefPtr<SWServer::Connection> m_serverConnection;
    8486    HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_jobMap;
    8587
  • trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp

    r220623 r220924  
    3030
    3131#include "JSDOMPromiseDeferred.h"
     32#include "ServiceWorkerJobData.h"
    3233#include "ServiceWorkerRegistrationParameters.h"
    3334
     
    4950}
    5051
    51 void ServiceWorkerJob::failedWithException(Exception&& exception)
     52void ServiceWorkerJob::failedWithException(const Exception& exception)
    5253{
    5354    ASSERT(currentThread() == m_creationThread);
    5455
    5556    ASSERT(!m_completed);
    56     m_promise->reject(WTFMove(exception));
     57    m_promise->reject(exception);
    5758    m_completed = true;
    5859
     
    6162}
    6263
     64ServiceWorkerJobData ServiceWorkerJob::data() const
     65{
     66    return { m_identifier, m_type };
     67}
     68
    6369} // namespace WebCore
    6470
  • trunk/Source/WebCore/workers/service/ServiceWorkerJob.h

    r220623 r220924  
    3030#include "ServiceWorkerJobClient.h"
    3131#include <wtf/RefPtr.h>
     32#include <wtf/RunLoop.h>
    3233#include <wtf/ThreadSafeRefCounted.h>
    3334#include <wtf/Threading.h>
     
    3738class DeferredPromise;
    3839class Exception;
     40enum class ServiceWorkerJobType;
     41struct ServiceWorkerJobData;
    3942struct ServiceWorkerRegistrationParameters;
    4043
     
    4649    }
    4750
    48     ~ServiceWorkerJob();
     51    WEBCORE_EXPORT ~ServiceWorkerJob();
    4952
    50     WEBCORE_EXPORT void failedWithException(Exception&&);
     53    WEBCORE_EXPORT void failedWithException(const Exception&);
    5154
    5255    uint64_t identifier() const { return m_identifier; }
     56
     57    ServiceWorkerJobData data() const;
    5358
    5459private:
     
    6267    uint64_t m_identifier;
    6368
     69    ServiceWorkerJobType m_type;
     70
     71    Ref<RunLoop> m_runLoop { RunLoop::current() };
     72
    6473#if !ASSERT_DISABLED
    6574    ThreadIdentifier m_creationThread { currentThread() };
  • trunk/Source/WebCore/workers/service/ServiceWorkerJobData.h

    r220922 r220924  
    3030namespace WebCore {
    3131
    32 class ServiceWorkerJob;
     32enum class ServiceWorkerJobType;
    3333
    34 class WEBCORE_EXPORT ServiceWorkerProvider {
    35 public:
    36     virtual ~ServiceWorkerProvider() { }
     34struct ServiceWorkerJobData {
     35    uint64_t identifier;
     36    ServiceWorkerJobType type;
    3737
    38     WEBCORE_EXPORT static ServiceWorkerProvider& singleton();
    39     WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
     38    template<class Encoder> void encode(Encoder&) const;
     39    template<class Decoder> static bool decode(Decoder&, ServiceWorkerJobData&);
     40};
    4041
    41     virtual void scheduleJob(ServiceWorkerJob&) = 0;
    42 };
     42template<class Encoder>
     43void ServiceWorkerJobData::encode(Encoder& encoder) const
     44{
     45    encoder << identifier;
     46    encoder.encodeEnum(type);
     47}
     48
     49template<class Decoder>
     50bool ServiceWorkerJobData::decode(Decoder& decoder, ServiceWorkerJobData& jobData)
     51{
     52    if (!decoder.decode(jobData.identifier))
     53        return false;
     54    if (!decoder.decodeEnum(jobData.type))
     55        return false;
     56
     57    return true;
     58}
    4359
    4460} // namespace WebCore
  • trunk/Source/WebCore/workers/service/ServiceWorkerJobType.h

    r220922 r220924  
    3030namespace WebCore {
    3131
    32 class ServiceWorkerJob;
    33 
    34 class WEBCORE_EXPORT ServiceWorkerProvider {
    35 public:
    36     virtual ~ServiceWorkerProvider() { }
    37 
    38     WEBCORE_EXPORT static ServiceWorkerProvider& singleton();
    39     WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
    40 
    41     virtual void scheduleJob(ServiceWorkerJob&) = 0;
     32enum class ServiceWorkerJobType {
     33    Register,
    4234};
    4335
  • trunk/Source/WebCore/workers/service/ServiceWorkerProvider.h

    r220623 r220924  
    2828#if ENABLE(SERVICE_WORKER)
    2929
     30#include "SWServer.h"
     31
     32namespace PAL {
     33class SessionID;
     34}
     35
    3036namespace WebCore {
    3137
     
    3945    WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
    4046
    41     virtual void scheduleJob(ServiceWorkerJob&) = 0;
     47    virtual SWServer::Connection& serviceWorkerConnectionForSession(const PAL::SessionID&) = 0;
    4248};
    4349
  • trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationParameters.h

    r220887 r220924  
    3636
    3737struct ServiceWorkerRegistrationParameters {
    38     PAL::SessionID sessionID;
    3938    URL scriptURL;
    4039    URL clientCreationURL;
  • trunk/Source/WebCore/workers/service/server/SWServer.cpp

    r220922 r220924  
    2525
    2626#include "config.h"
    27 #include "WebServiceWorkerProvider.h"
     27#include "SWServer.h"
    2828
    2929#if ENABLE(SERVICE_WORKER)
    3030
    31 #include <WebCore/Exception.h>
    32 #include <WebCore/ExceptionCode.h>
    33 #include <WebCore/ServiceWorkerJob.h>
     31#include "ExceptionCode.h"
     32#include "ExceptionData.h"
     33#include "ServiceWorkerJobData.h"
    3434#include <wtf/text/WTFString.h>
    3535
    36 using namespace WebCore;
     36namespace WebCore {
    3737
    38 namespace WebKit {
     38void SWServer::Connection::scheduleJob(ServiceWorkerJob& job)
     39{
     40    auto addResult = m_scheduledJobs.add(job.identifier(), &job);
     41    ASSERT_UNUSED(addResult, addResult.isNewEntry);
    3942
    40 WebServiceWorkerProvider& WebServiceWorkerProvider::singleton()
    41 {
    42     static NeverDestroyed<WebServiceWorkerProvider> provider;
    43     return provider;
     43    scheduleJob(job.data());
    4444}
    4545
    46 WebServiceWorkerProvider::WebServiceWorkerProvider()
     46void SWServer::Connection::jobRejected(uint64_t jobIdentifier, const ExceptionData& exceptionData)
    4747{
     48    auto job = m_scheduledJobs.take(jobIdentifier);
     49    if (!job) {
     50        LOG_ERROR("Job %" PRIu64 " rejected from server, but was not found", jobIdentifier);
     51        return;
     52    }
     53
     54    job->failedWithException(exceptionData.toException());
    4855}
    4956
    50 void WebServiceWorkerProvider::scheduleJob(ServiceWorkerJob& job)
    51 {
    52     job.failedWithException(Exception { UnknownError, ASCIILiteral("serviceWorker job scheduling is not yet implemented") });
    53 }
    54 
    55 } // namespace WebKit
     57} // namespace WebCore
    5658
    5759#endif // ENABLE(SERVICE_WORKER)
  • trunk/Source/WebCore/workers/service/server/SWServer.h

    r220922 r220924  
    2828#if ENABLE(SERVICE_WORKER)
    2929
     30#include "ServiceWorkerJob.h"
     31#include <wtf/HashMap.h>
     32#include <wtf/ThreadSafeRefCounted.h>
     33
    3034namespace WebCore {
    3135
    32 class ServiceWorkerJob;
     36struct ExceptionData;
    3337
    34 class WEBCORE_EXPORT ServiceWorkerProvider {
     38class SWServer {
    3539public:
    36     virtual ~ServiceWorkerProvider() { }
     40    class Connection : public ThreadSafeRefCounted<Connection> {
     41    public:
     42        virtual ~Connection() { }
     43        void scheduleJob(ServiceWorkerJob&);
    3744
    38     WEBCORE_EXPORT static ServiceWorkerProvider& singleton();
    39     WEBCORE_EXPORT static void setSharedProvider(ServiceWorkerProvider&);
     45    protected:
     46        WEBCORE_EXPORT void jobRejected(uint64_t jobIdentifier, const ExceptionData&);
    4047
    41     virtual void scheduleJob(ServiceWorkerJob&) = 0;
     48    private:
     49        virtual void scheduleJob(const ServiceWorkerJobData&) = 0;
     50
     51        HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_scheduledJobs;
     52    };
     53
    4254};
    4355
  • trunk/Source/WebKit/CMakeLists.txt

    r220917 r220924  
    529529    WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
    530530
     531    WebProcess/Storage/WebSWServerConnection.cpp
    531532    WebProcess/Storage/WebServiceWorkerProvider.cpp
    532533    WebProcess/Storage/WebToStorageProcessConnection.cpp
     
    668669    WebProcess/Plugins/PluginProcessConnectionManager.messages.in
    669670    WebProcess/Plugins/PluginProxy.messages.in
     671
     672    WebProcess/Storage/WebSWServerConnection.messages.in
    670673
    671674    WebProcess/UserContent/WebUserContentController.messages.in
  • trunk/Source/WebKit/ChangeLog

    r220922 r220924  
     12017-08-18  Brady Eidson  <beidson@apple.com>
     2
     3        Bounce ServiceWorker jobs to the Storage Process.
     4        https://bugs.webkit.org/show_bug.cgi?id=175650
     5
     6        Reviewed by Andy Estes.
     7
     8        * CMakeLists.txt:
     9        * DerivedSources.make:
     10        * WebKit.xcodeproj/project.pbxproj:
     11
     12        * Platform/Logging.h:
     13
     14        * StorageProcess/StorageToWebProcessConnection.cpp:
     15        (WebKit::StorageToWebProcessConnection::didReceiveMessage):
     16        (WebKit::StorageToWebProcessConnection::didClose):
     17        (WebKit::StorageToWebProcessConnection::establishSWServerConnection):
     18        (WebKit::StorageToWebProcessConnection::removeSWServerConnection):
     19        (WebKit::StorageToWebProcessConnection::establishIDBConnectionToServer):
     20        * StorageProcess/StorageToWebProcessConnection.h:
     21        * StorageProcess/StorageToWebProcessConnection.messages.in:
     22
     23        * WebProcess/Storage/WebSWServerConnection.cpp: Added.
     24        (WebKit::WebSWServerConnection::WebSWServerConnection):
     25        (WebKit::WebSWServerConnection::~WebSWServerConnection):
     26        (WebKit::WebSWServerConnection::disconnectedFromWebProcess):
     27        (WebKit::WebSWServerConnection::scheduleJob):
     28        (WebKit::WebSWServerConnection::scheduleStorageJob):
     29        * WebProcess/Storage/WebSWServerConnection.h: Copied from Source/WebCore/workers/service/ServiceWorkerJob.h.
     30        (WebKit::WebSWServerConnection::create):
     31        (WebKit::WebSWServerConnection::identifier const):
     32        * WebProcess/Storage/WebSWServerConnection.messages.in: Copied from Source/WebKit/StorageProcess/StorageToWebProcessConnection.messages.in.
     33
     34        * WebProcess/Storage/WebServiceWorkerProvider.cpp:
     35        (WebKit::WebServiceWorkerProvider::serviceWorkerConnectionForSession):
     36        (WebKit::WebServiceWorkerProvider::scheduleJob): Deleted.
     37        * WebProcess/Storage/WebServiceWorkerProvider.h:
     38
     39        * WebProcess/Storage/WebToStorageProcessConnection.cpp:
     40        (WebKit::WebToStorageProcessConnection::didReceiveMessage):
     41        (WebKit::WebToStorageProcessConnection::serviceWorkerConnectionForSession):
     42        * WebProcess/Storage/WebToStorageProcessConnection.h:
     43
    1442017-08-18  Chris Dumez  <cdumez@apple.com>
    245
  • trunk/Source/WebKit/DerivedSources.make

    r220917 r220924  
    159159    WebPaymentCoordinator \
    160160    WebPaymentCoordinatorProxy \
     161    WebSWServerConnection \
    161162    PlaybackSessionManager \
    162163    PlaybackSessionManagerProxy \
  • trunk/Source/WebKit/Platform/Logging.h

    r219569 r220924  
    4747    M(Gamepad) \
    4848    M(IconDatabase) \
    49     M(IDB) \
    5049    M(IndexedDB) \
    5150    M(IPC) \
     
    6665    M(ResourceLoadStatistics) \
    6766    M(Selection) \
     67    M(ServiceWorker) \
    6868    M(SessionState) \
    6969    M(StorageAPI) \
  • trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp

    r220857 r220924  
    3131#include "WebIDBConnectionToClient.h"
    3232#include "WebIDBConnectionToClientMessages.h"
     33#include "WebSWServerConnection.h"
     34#include "WebSWServerConnectionMessages.h"
    3335#include <wtf/RunLoop.h>
     36
     37using namespace PAL;
    3438
    3539namespace WebKit {
     
    6872#endif
    6973
     74#if ENABLE(SERVICE_WORKER)
     75    if (decoder.messageReceiverName() == Messages::WebSWServerConnection::messageReceiverName()) {
     76        auto iterator = m_webServiceWorkerConnections.find(decoder.destinationID());
     77        if (iterator != m_webServiceWorkerConnections.end())
     78            iterator->value->didReceiveMessage(connection, decoder);
     79        return;
     80    }
     81#endif
     82
    7083    ASSERT_NOT_REACHED();
    7184}
     
    8497{
    8598#if ENABLE(INDEXED_DATABASE)
    86     auto connections = m_webIDBConnections;
    87     for (auto& connection : connections.values())
     99    auto idbConnections = m_webIDBConnections;
     100    for (auto& connection : idbConnections.values())
    88101        connection->disconnectedFromWebProcess();
    89102
    90103    m_webIDBConnections.clear();
     104#endif
     105
     106#if ENABLE(SERVICE_WORKER)
     107    auto serviceWorkerConnections = m_webServiceWorkerConnections;
     108    for (auto& connection : serviceWorkerConnections.values())
     109        connection->disconnectedFromWebProcess();
     110
     111    m_webServiceWorkerConnections.clear();
    91112#endif
    92113}
     
    97118}
    98119
    99 #if ENABLE(INDEXED_DATABASE)
    100 
    101120static uint64_t generateConnectionToServerIdentifier()
    102121{
     
    106125}
    107126
    108 void StorageToWebProcessConnection::establishIDBConnectionToServer(PAL::SessionID sessionID, uint64_t& serverConnectionIdentifier)
     127#if ENABLE(SERVICE_WORKER)
     128void StorageToWebProcessConnection::establishSWServerConnection(SessionID sessionID, uint64_t& serverConnectionIdentifier)
     129{
     130    serverConnectionIdentifier = generateConnectionToServerIdentifier();
     131    LOG(ServiceWorker, "StorageToWebProcessConnection::establishSWServerConnection - %" PRIu64, serverConnectionIdentifier);
     132    ASSERT(!m_webServiceWorkerConnections.contains(serverConnectionIdentifier));
     133
     134    m_webServiceWorkerConnections.set(serverConnectionIdentifier, WebSWServerConnection::create(m_connection.get(), serverConnectionIdentifier, sessionID));
     135}
     136
     137void StorageToWebProcessConnection::removeSWServerConnection(uint64_t serverConnectionIdentifier)
     138{
     139    ASSERT(m_webServiceWorkerConnections.contains(serverConnectionIdentifier));
     140
     141    auto connection = m_webServiceWorkerConnections.take(serverConnectionIdentifier);
     142    connection->disconnectedFromWebProcess();
     143}
     144#endif
     145
     146#if ENABLE(INDEXED_DATABASE)
     147void StorageToWebProcessConnection::establishIDBConnectionToServer(SessionID sessionID, uint64_t& serverConnectionIdentifier)
    109148{
    110149    serverConnectionIdentifier = generateConnectionToServerIdentifier();
  • trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.h

    r220887 r220924  
    3535
    3636class WebIDBConnectionToClient;
     37class WebSWServerConnection;
    3738
    3839class StorageToWebProcessConnection : public RefCounted<StorageToWebProcessConnection>, public IPC::Connection::Client, public IPC::MessageSender {
     
    6667#endif // ENABLE(INDEXED_DATABASE)
    6768
     69#if ENABLE(SERVICE_WORKER)
     70    void establishSWServerConnection(PAL::SessionID, uint64_t& serverConnectionIdentifier);
     71    void removeSWServerConnection(uint64_t serverConnectionIdentifier);
     72    HashMap<uint64_t, RefPtr<WebSWServerConnection>> m_webServiceWorkerConnections;
     73#endif
     74
    6875    Ref<IPC::Connection> m_connection;
    6976};
  • trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.messages.in

    r220857 r220924  
    2323messages -> StorageToWebProcessConnection LegacyReceiver {
    2424#if ENABLE(INDEXED_DATABASE)
    25     # Creates a connection for communication with a WebProcess
    2625    EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier)
    2726    RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)
    2827#endif
     28#if ENABLE(SERVICE_WORKER)
     29    EstablishSWServerConnection(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier)
     30    RemoveSWServerConnection(uint64_t serverConnectionIdentifier)
     31#endif
    2932}
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r220917 r220924  
    10271027                5179556D162877B100FA43B6 /* NetworkProcessProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510CC7EA16138E7200D03ED3 /* NetworkProcessProxy.cpp */; };
    10281028                5179556E162877B300FA43B6 /* NetworkProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 510CC7EB16138E7200D03ED3 /* NetworkProcessProxy.h */; };
     1029                517A52D81F43A9DA00DCDC0A /* WebSWServerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A52D71F43A9B600DCDC0A /* WebSWServerConnectionMessageReceiver.cpp */; };
     1030                517A52D91F43A9DA00DCDC0A /* WebSWServerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A52D61F43A9B600DCDC0A /* WebSWServerConnectionMessages.h */; };
    10291031                517CF0E3163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */; };
    10301032                517CF0E3163A486C00C2950D /* WebCacheStorageConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517CF0E1163A486C00C2950D /* WebCacheStorageConnectionMessageReceiver.cpp */; };
     
    11091111                51F060E11654318500F3282C /* WebRTCResolverMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3282C /* WebRTCResolverMessageReceiver.cpp */; };
    11101112                51F060E11654318500F3282E /* NetworkRTCProviderMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F060DD1654317500F3282E /* NetworkRTCProviderMessageReceiver.cpp */; };
     1113                51F645881F472E2E00B54DED /* WebSWServerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645861F472E2600B54DED /* WebSWServerConnection.h */; };
     1114                51F645891F472E2E00B54DED /* WebSWServerConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F645871F472E2600B54DED /* WebSWServerConnection.cpp */; };
    11111115                51F7DC41180CC93600212CA3 /* XPCServiceMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC82839616B47EC400A278FE /* XPCServiceMain.mm */; };
    11121116                51F7DC43180CC93600212CA3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC3DE46815A91763008D26FC /* Foundation.framework */; };
     
    33023306                517A33B3130B308C00F80CB5 /* WKApplicationCacheManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKApplicationCacheManager.cpp; sourceTree = "<group>"; };
    33033307                517A33B4130B308C00F80CB5 /* WKApplicationCacheManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKApplicationCacheManager.h; sourceTree = "<group>"; };
     3308                517A52D61F43A9B600DCDC0A /* WebSWServerConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWServerConnectionMessages.h; sourceTree = "<group>"; };
     3309                517A52D71F43A9B600DCDC0A /* WebSWServerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWServerConnectionMessageReceiver.cpp; sourceTree = "<group>"; };
    33043310                517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkProcessConnectionMessageReceiver.cpp; sourceTree = "<group>"; };
    33053311                517CF0E1163A486C00C2950D /* WebCacheStorageConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebCacheStorageConnectionMessageReceiver.cpp; sourceTree = "<group>"; };
     
    34103416                51F060DD1654317500F3282E /* NetworkRTCProviderMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkRTCProviderMessageReceiver.cpp; sourceTree = "<group>"; };
    34113417                51F060DE1654317500F3281B /* WebResourceLoaderMessages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebResourceLoaderMessages.h; sourceTree = "<group>"; };
     3418                51F645851F472E2600B54DED /* WebSWServerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWServerConnection.messages.in; sourceTree = "<group>"; };
     3419                51F645861F472E2600B54DED /* WebSWServerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWServerConnection.h; sourceTree = "<group>"; };
     3420                51F645871F472E2600B54DED /* WebSWServerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWServerConnection.cpp; sourceTree = "<group>"; };
    34123421                51F7DC4A180CC93600212CA3 /* com.apple.WebKit.Storage.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = com.apple.WebKit.Storage.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
    34133422                51F886A31F2C214A00C193EF /* WKTestingSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKTestingSupport.cpp; sourceTree = "<group>"; };
     
    60676076                                51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */,
    60686077                                51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */,
     6078                                51F645861F472E2600B54DED /* WebSWServerConnection.h */,
     6079                                51F645871F472E2600B54DED /* WebSWServerConnection.cpp */,
     6080                                51F645851F472E2600B54DED /* WebSWServerConnection.messages.in */,
    60696081                                5118E9991F295259003EF9F5 /* WebToStorageProcessConnection.cpp */,
    60706082                                5118E99A1F295259003EF9F5 /* WebToStorageProcessConnection.h */,
     
    79998011                                51F060DD1654317500F3282C /* WebRTCResolverMessageReceiver.cpp */,
    80008012                                51F060DD1654317500F3281C /* WebRTCSocketMessageReceiver.cpp */,
     8013                                517A52D71F43A9B600DCDC0A /* WebSWServerConnectionMessageReceiver.cpp */,
     8014                                517A52D61F43A9B600DCDC0A /* WebSWServerConnectionMessages.h */,
    80018015                                5C0B17761E7C879C00E9123C /* WebSocketStreamMessageReceiver.cpp */,
    80028016                                5C0B17771E7C879C00E9123C /* WebSocketStreamMessages.h */,
     
    83428356                                1AC1336C18565C7A00F3EC05 /* APIPageHandle.h in Headers */,
    83438357                                1AFDD3151891B54000153970 /* APIPolicyClient.h in Headers */,
     8358                                51F645881F472E2E00B54DED /* WebSWServerConnection.h in Headers */,
    83448359                                7CE4D2201A4914CA00C7F152 /* APIProcessPoolConfiguration.h in Headers */,
    83458360                                F634445612A885C8000612D8 /* APISecurityOrigin.h in Headers */,
     
    88908905                                D3B9484911FF4B6500032B39 /* WebSearchPopupMenu.h in Headers */,
    88918906                                51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */,
     8907                                517A52D91F43A9DA00DCDC0A /* WebSWServerConnectionMessages.h in Headers */,
    88928908                                1A4832D71A9CDF96008B4DFE /* WebsiteData.h in Headers */,
    88938909                                1A4832D11A9BDC2F008B4DFE /* WebsiteDataRecord.h in Headers */,
     
    1052210538                                D3B9484811FF4B6500032B39 /* WebSearchPopupMenu.cpp in Sources */,
    1052310539                                51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */,
     10540                                517A52D81F43A9DA00DCDC0A /* WebSWServerConnectionMessageReceiver.cpp in Sources */,
    1052410541                                1A4832D61A9CDF96008B4DFE /* WebsiteData.cpp in Sources */,
    1052510542                                1A4832D91A9D1FD2008B4DFE /* WebsiteDataRecord.cpp in Sources */,
     
    1065810675                                370F34A21829BE1E009027C8 /* WKNavigationData.mm in Sources */,
    1065910676                                BCF69FAA1176D1CB00471A52 /* WKNavigationDataRef.cpp in Sources */,
     10677                                51F645891F472E2E00B54DED /* WebSWServerConnection.cpp in Sources */,
    1066010678                                2D3A65E21A7C3A9300CAC637 /* WKNavigationRef.cpp in Sources */,
    1066110679                                1A1B0EB518A424950038481A /* WKNavigationResponse.mm in Sources */,
  • trunk/Source/WebKit/WebProcess/Storage/WebSWServerConnection.h

    r220922 r220924  
    2828#if ENABLE(SERVICE_WORKER)
    2929
    30 #include "ServiceWorkerJobClient.h"
    31 #include <wtf/RefPtr.h>
    32 #include <wtf/ThreadSafeRefCounted.h>
    33 #include <wtf/Threading.h>
     30#include "MessageReceiver.h"
     31#include "MessageSender.h"
     32#include <WebCore/SWServer.h>
     33#include <pal/SessionID.h>
    3434
    3535namespace WebCore {
     36struct ExceptionData;
     37}
    3638
    37 class DeferredPromise;
    38 class Exception;
    39 struct ServiceWorkerRegistrationParameters;
     39namespace WebKit {
    4040
    41 class ServiceWorkerJob : public ThreadSafeRefCounted<ServiceWorkerJob> {
     41class WebSWServerConnection : public WebCore::SWServer::Connection, public IPC::MessageSender, public IPC::MessageReceiver {
    4242public:
    43     static Ref<ServiceWorkerJob> createRegisterJob(ServiceWorkerJobClient& client, Ref<DeferredPromise>&& promise, ServiceWorkerRegistrationParameters&& parameters)
     43    static Ref<WebSWServerConnection> create(const PAL::SessionID& sessionID)
    4444    {
    45         return adoptRef(*new ServiceWorkerJob(client, WTFMove(promise), WTFMove(parameters)));
     45        return adoptRef(*new WebSWServerConnection(sessionID));
     46    }
     47    static Ref<WebSWServerConnection> create(IPC::Connection& connection, uint64_t connectionIdentifier, const PAL::SessionID& sessionID)
     48    {
     49        return adoptRef(*new WebSWServerConnection(connection, connectionIdentifier, sessionID));
    4650    }
    4751
    48     ~ServiceWorkerJob();
    49 
    50     WEBCORE_EXPORT void failedWithException(Exception&&);
     52    ~WebSWServerConnection() final;
    5153
    5254    uint64_t identifier() const { return m_identifier; }
    5355
     56    void scheduleJob(const WebCore::ServiceWorkerJobData&) final;
     57
     58    void disconnectedFromWebProcess();
     59    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
     60
    5461private:
    55     ServiceWorkerJob(ServiceWorkerJobClient&, Ref<DeferredPromise>&&, ServiceWorkerRegistrationParameters&&);
     62    WebSWServerConnection(const PAL::SessionID&);
     63    WebSWServerConnection(IPC::Connection&, uint64_t connectionIdentifier, const PAL::SessionID&);
    5664
    57     Ref<ServiceWorkerJobClient> m_client;
    58     std::unique_ptr<ServiceWorkerRegistrationParameters> m_registrationParameters;
    59     Ref<DeferredPromise> m_promise;
     65    void scheduleStorageJob(const WebCore::ServiceWorkerJobData&);
    6066
    61     bool m_completed { false };
     67    IPC::Connection* messageSenderConnection() final { return m_connection.ptr(); }
     68    uint64_t messageSenderDestinationID() final { return m_identifier; }
     69
     70    PAL::SessionID m_sessionID;
    6271    uint64_t m_identifier;
    6372
    64 #if !ASSERT_DISABLED
    65     ThreadIdentifier m_creationThread { currentThread() };
    66 #endif
    67 };
     73    Ref<IPC::Connection> m_connection;
     74}; // class WebSWServerConnection
    6875
    69 } // namespace WebCore
     76} // namespace WebKit
    7077
    7178#endif // ENABLE(SERVICE_WORKER)
    72 
  • trunk/Source/WebKit/WebProcess/Storage/WebSWServerConnection.messages.in

    r220922 r220924  
    1 # Copyright (C) 2013 Apple Inc. All rights reserved.
     1# Copyright (C) 2017 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    2121# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2222
    23 messages -> StorageToWebProcessConnection LegacyReceiver {
    24 #if ENABLE(INDEXED_DATABASE)
    25     # Creates a connection for communication with a WebProcess
    26     EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier)
    27     RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)
    28 #endif
     23#if ENABLE(SERVICE_WORKER)
     24
     25messages -> WebSWServerConnection {
     26    # Messages targetting the Storage process
     27    ScheduleStorageJob(struct WebCore::ServiceWorkerJobData jobData)
     28
     29    # Messages targetting the Web process.
     30    # When possible, they can be implemented directly by WebCore::SWServer::Connection
     31    JobRejected(uint64_t identifier, struct WebCore::ExceptionData exception)
    2932}
     33
     34#endif // ENABLE(SERVICE_WORKER)
  • trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp

    r220539 r220924  
    2929#if ENABLE(SERVICE_WORKER)
    3030
     31#include "WebProcess.h"
     32#include "WebSWServerConnection.h"
     33#include "WebToStorageProcessConnection.h"
    3134#include <WebCore/Exception.h>
    3235#include <WebCore/ExceptionCode.h>
    3336#include <WebCore/ServiceWorkerJob.h>
     37#include <pal/SessionID.h>
    3438#include <wtf/text/WTFString.h>
    3539
     40using namespace PAL;
    3641using namespace WebCore;
    3742
     
    4853}
    4954
    50 void WebServiceWorkerProvider::scheduleJob(ServiceWorkerJob& job)
     55SWServer::Connection& WebServiceWorkerProvider::serviceWorkerConnectionForSession(const SessionID& sessionID)
    5156{
    52     job.failedWithException(Exception { UnknownError, ASCIILiteral("serviceWorker job scheduling is not yet implemented") });
     57    ASSERT(WebProcess::singleton().webToStorageProcessConnection());
     58    return WebProcess::singleton().webToStorageProcessConnection()->serviceWorkerConnectionForSession(sessionID);
    5359}
    5460
  • trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h

    r220539 r220924  
    4141    WebServiceWorkerProvider();
    4242
    43     void scheduleJob(WebCore::ServiceWorkerJob&) final;
     43    WebCore::SWServer::Connection& serviceWorkerConnectionForSession(const PAL::SessionID&) final;
    4444
    4545}; // class WebServiceWorkerProvider
  • trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp

    r220857 r220924  
    3131#include "WebIDBConnectionToServerMessages.h"
    3232#include "WebProcess.h"
     33#include "WebSWServerConnection.h"
     34#include "WebSWServerConnectionMessages.h"
    3335
     36using namespace PAL;
    3437using namespace WebCore;
    3538
     
    5659    }
    5760#endif
    58    
     61
     62#if ENABLE(SERVICE_WORKER)
     63    if (decoder.messageReceiverName() == Messages::WebSWServerConnection::messageReceiverName()) {
     64        auto serviceWorkerConnection = m_serviceWorkerConnectionsByIdentifier.get(decoder.destinationID());
     65        if (serviceWorkerConnection)
     66            serviceWorkerConnection->didReceiveMessage(connection, decoder);
     67        return;
     68    }
     69#endif
    5970    ASSERT_NOT_REACHED();
    6071}
     
    91102#endif
    92103
     104#if ENABLE(SERVICE_WORKER)
     105WebSWServerConnection& WebToStorageProcessConnection::serviceWorkerConnectionForSession(const SessionID& sessionID)
     106{
     107    auto result = m_serviceWorkerConnectionsBySession.add(sessionID, nullptr);
     108    if (result.isNewEntry) {
     109        result.iterator->value = WebSWServerConnection::create(sessionID);
     110        ASSERT(!m_serviceWorkerConnectionsByIdentifier.contains(result.iterator->value->identifier()));
     111        m_serviceWorkerConnectionsByIdentifier.set(result.iterator->value->identifier(), result.iterator->value);
     112    }
     113
     114    return *result.iterator->value;
     115}
     116#endif
     117
    93118} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h

    r220887 r220924  
    3939namespace WebKit {
    4040
     41class WebSWServerConnection;
     42
    4143class WebToStorageProcessConnection : public RefCounted<WebToStorageProcessConnection>, public IPC::Connection::Client, public IPC::MessageSender {
    4244public:
     
    5153#if ENABLE(INDEXED_DATABASE)
    5254    WebIDBConnectionToServer& idbConnectionToServerForSession(const PAL::SessionID&);
     55#endif
     56#if ENABLE(SERVICE_WORKER)
     57    WebSWServerConnection& serviceWorkerConnectionForSession(const PAL::SessionID&);
    5358#endif
    5459
     
    7176    HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier;
    7277#endif
     78
     79#if ENABLE(SERVICE_WORKER)
     80    HashMap<PAL::SessionID, RefPtr<WebSWServerConnection>> m_serviceWorkerConnectionsBySession;
     81    HashMap<uint64_t, RefPtr<WebSWServerConnection>> m_serviceWorkerConnectionsByIdentifier;
     82#endif
    7383};
    7484
Note: See TracChangeset for help on using the changeset viewer.