Changeset 220539 in webkit


Ignore:
Timestamp:
Aug 10, 2017 12:28:26 PM (7 years ago)
Author:
beidson@apple.com
Message:

Add ServiceWorkerJob.
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:
Location:
trunk
Files:
14 added
14 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r220535 r220539  
     12017-08-10  Brady Eidson  <beidson@apple.com>
     2
     3        Add ServiceWorkerJob.
     4        https://bugs.webkit.org/show_bug.cgi?id=175241
     5
     6        Reviewed by Tim Horton.
     7
     8        Verifies that the "serviceWorker.register()" job we currently schedule fails as expected.
     9
     10        * http/tests/workers/service/basic-register-expected.txt: Added.
     11        * http/tests/workers/service/basic-register.html: Added.
     12        * http/tests/workers/service/resources/basic-register.js: Added.
     13        * http/tests/workers/service/resources/empty-worker.js: Added.
     14        * platform/mac-wk1/TestExpectations:
     15        * platform/win/TestExpectations:
     16
    1172017-08-10  Commit Queue  <commit-queue@webkit.org>
    218
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r220507 r220539  
    391391# requires wk2 speculative tiling
    392392fast/images/low-memory-decode.html [ Skip ]
     393
     394http/tests/workers/service [ Skip ]
  • trunk/LayoutTests/platform/win/TestExpectations

    r220507 r220539  
    40734073imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any.html [ Slow ]
    40744074
     4075http/tests/workers/service [ Skip ]
  • trunk/Source/WebCore/CMakeLists.txt

    r220532 r220539  
    29802980    workers/ServiceWorkerContainer.cpp
    29812981    workers/ServiceWorkerGlobalScope.cpp
     2982    workers/ServiceWorkerJob.cpp
     2983    workers/ServiceWorkerProvider.cpp
    29822984    workers/ServiceWorkerRegistration.cpp
     2985    workers/ServiceWorkerRegistrationParameters.cpp
    29832986    workers/Worker.cpp
    29842987    workers/WorkerConsoleClient.cpp
  • trunk/Source/WebCore/ChangeLog

    r220538 r220539  
     12017-08-10  Brady Eidson  <beidson@apple.com>
     2
     3        Add ServiceWorkerJob.
     4        https://bugs.webkit.org/show_bug.cgi?id=175241
     5
     6        Reviewed by Tim Horton.
     7
     8        Test: http/tests/workers/service/basic-register.html
     9
     10        This patch does a few things:
     11        - Adds the spec concept of a ServiceWorkerJob (in the WebProcess, at least)
     12        - Adds a ServiceWorkerProvider interface for WebKit to implement
     13        - Actually creates a job for service worker registration and "schedules" it,
     14          though it always immediately errors out the promise.
     15
     16        Actually queuing jobs and executing asynchronously is coming up soon.
     17
     18        * CMakeLists.txt:
     19        * WebCore.xcodeproj/project.pbxproj:
     20
     21        * dom/Document.cpp:
     22        (WebCore::Document::sessionID const):
     23        * dom/Document.h:
     24
     25        * workers/ServiceWorkerContainer.cpp:
     26        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
     27        (WebCore::ServiceWorkerContainer::addRegistration):
     28        (WebCore::ServiceWorkerContainer::scheduleJob):
     29        (WebCore::ServiceWorkerContainer::jobDidFinish):
     30        * workers/ServiceWorkerContainer.h:
     31
     32        * workers/ServiceWorkerJob.cpp: Added.
     33        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
     34        (WebCore::ServiceWorkerJob::~ServiceWorkerJob):
     35        (WebCore::ServiceWorkerJob::failedWithException):
     36        * workers/ServiceWorkerJob.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
     37        (WebCore::ServiceWorkerJob::createRegisterJob):
     38        (WebCore::ServiceWorkerJob::identifier const):
     39
     40        * workers/ServiceWorkerJobClient.h: Added.
     41        (WebCore::ServiceWorkerJobClient::~ServiceWorkerJobClient):
     42
     43        * workers/ServiceWorkerProvider.cpp: Added.
     44        (WebCore::ServiceWorkerProvider::singleton):
     45        (WebCore::ServiceWorkerProvider::setSharedProvider):
     46        * workers/ServiceWorkerProvider.h: Added.
     47        * workers/ServiceWorkerRegistrationOptions.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
     48        * workers/ServiceWorkerRegistrationParameters.cpp: Added.
     49        * workers/ServiceWorkerRegistrationParameters.h: Added.
     50
    1512017-08-10  Tim Horton  <timothy_horton@apple.com>
    252
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r220506 r220539  
    21682168                510D4A38103165EE0049EA54 /* SocketStreamHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    21692169                5110FCFC1E03641D006F8D0B /* IDBCursorRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 5110FCFB1E0362A5006F8D0B /* IDBCursorRecord.h */; };
     2170                511CA6791F3904B10019E074 /* ServiceWorkerProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */; };
     2171                511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2172                511CA67D1F3905A60019E074 /* ServiceWorkerJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */; };
     2173                511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA67B1F3905710019E074 /* ServiceWorkerJob.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2174                511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2175                511CA6831F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */; };
     2176                511CA6841F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */; settings = {ATTRIBUTES = (Private, ); }; };
    21702177                511EC1271C50AACA0032F983 /* IDBSerialization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511EC1251C50AA570032F983 /* IDBSerialization.cpp */; };
    21712178                511EC1281C50AACA0032F983 /* IDBSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 511EC1261C50AA570032F983 /* IDBSerialization.h */; };
     
    23122319                5182C23F1F313A090059BA7C /* ServiceWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23B1F3139FC0059BA7C /* ServiceWorker.h */; settings = {ATTRIBUTES = (Private, ); }; };
    23132320                5182C2401F313A090059BA7C /* ServiceWorkerContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2381F3139FC0059BA7C /* ServiceWorkerContainer.cpp */; };
    2314                 5182C2411F313A090059BA7C /* ServiceWorkerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C2331F3139FC0059BA7C /* ServiceWorkerContainer.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2321                5182C2411F313A090059BA7C /* ServiceWorkerContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C2331F3139FC0059BA7C /* ServiceWorkerContainer.h */; };
    23152322                5182C2421F313A090059BA7C /* ServiceWorkerGlobalScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2361F3139FC0059BA7C /* ServiceWorkerGlobalScope.cpp */; };
    23162323                5182C2431F313A090059BA7C /* ServiceWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    24172424                51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24182425                51BE37E00DAEE00E001085FC /* StorageArea.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BE37DE0DAEE00E001085FC /* StorageArea.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2426                51BEB6391F3B94B0005029B9 /* ServiceWorkerRegistrationOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24192427                51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0AA380F2AA10A001648C2 /* CachedFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
    24202428                51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */; };
     
    98849892                510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandleClient.h; sourceTree = "<group>"; };
    98859893                5110FCFB1E0362A5006F8D0B /* IDBCursorRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCursorRecord.h; sourceTree = "<group>"; };
     9894                511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerProvider.cpp; sourceTree = "<group>"; };
     9895                511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerProvider.h; sourceTree = "<group>"; };
     9896                511CA67B1F3905710019E074 /* ServiceWorkerJob.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJob.h; sourceTree = "<group>"; };
     9897                511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerJob.cpp; sourceTree = "<group>"; };
     9898                511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJobClient.h; sourceTree = "<group>"; };
     9899                511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerRegistrationParameters.h; sourceTree = "<group>"; };
     9900                511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerRegistrationParameters.cpp; sourceTree = "<group>"; };
    98869901                511EC1251C50AA570032F983 /* IDBSerialization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSerialization.cpp; sourceTree = "<group>"; };
    98879902                511EC1261C50AA570032F983 /* IDBSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSerialization.h; sourceTree = "<group>"; };
     
    1013410149                51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryIDBBackingStore.h; sourceTree = "<group>"; };
    1013510150                51BE37DE0DAEE00E001085FC /* StorageArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageArea.h; sourceTree = "<group>"; };
     10151                51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerRegistrationOptions.h; sourceTree = "<group>"; };
    1013610152                51C0AA380F2AA10A001648C2 /* CachedFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedFrame.h; sourceTree = "<group>"; };
    1013710153                51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedFrame.cpp; sourceTree = "<group>"; };
     
    1749817514                                5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */,
    1749917515                                5182C2391F3139FC0059BA7C /* ServiceWorkerGlobalScope.idl */,
     17516                                511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */,
     17517                                511CA67B1F3905710019E074 /* ServiceWorkerJob.h */,
     17518                                511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */,
     17519                                511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */,
     17520                                511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */,
    1750017521                                5182C2341F3139FC0059BA7C /* ServiceWorkerRegistration.cpp */,
    1750117522                                5182C2371F3139FC0059BA7C /* ServiceWorkerRegistration.h */,
    1750217523                                5182C2321F3139FC0059BA7C /* ServiceWorkerRegistration.idl */,
     17524                                51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */,
     17525                                511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */,
     17526                                511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */,
    1750317527                                51F174FD1F35898800C74950 /* ServiceWorkerUpdateViaCache.h */,
    1750417528                                51F174FB1F3588D700C74950 /* ServiceWorkerUpdateViaCache.idl */,
     
    2674126765                                A584FE2618637DAB00843B10 /* CommandLineAPIModuleSource.h in Headers */,
    2674226766                                6550B6A2099DF0270090D781 /* Comment.h in Headers */,
     26767                                511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */,
    2674326768                                57E664FC1E73703300765536 /* CommonCryptoDERUtilities.h in Headers */,
    2674426769                                E1FE137518402A6700892F13 /* CommonCryptoUtilities.h in Headers */,
     
    2745827483                                977B3867122883E900B81FF8 /* HTMLDocumentParser.h in Headers */,
    2745927484                                93F198E608245E59001E9ABC /* HTMLElement.h in Headers */,
     27485                                51BEB6391F3B94B0005029B9 /* ServiceWorkerRegistrationOptions.h in Headers */,
    2746027486                                A17C81230F2A5CF7005DAAEB /* HTMLElementFactory.h in Headers */,
    2746127487                                977B37241228721700B81FF8 /* HTMLElementStack.h in Headers */,
     
    2871228738                                07EE76EF1BEA619800F89133 /* MockRealtimeVideoSourceMac.h in Headers */,
    2871328739                                CDF2B0171820540700F2B424 /* MockSourceBufferPrivate.h in Headers */,
     28740                                511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */,
    2871428741                                CDF2B0191820540700F2B424 /* MockTracks.h in Headers */,
    2871528742                                C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */,
     
    2902429051                                41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */,
    2902529052                                BC4368E80C226E32005EFB5F /* Rect.h in Headers */,
     29053                                511CA6841F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.h in Headers */,
    2902629054                                FD45A958175D414C00C21EC8 /* RectangleShape.h in Headers */,
    2902729055                                9831AE4A154225C900FE2644 /* ReferrerPolicy.h in Headers */,
     
    2970129729                                B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */,
    2970229730                                83C1D430178D5AB500141E68 /* SVGPathSegLinetoHorizontalAbs.h in Headers */,
     29731                                511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */,
    2970329732                                83C1D431178D5AB500141E68 /* SVGPathSegLinetoHorizontalRel.h in Headers */,
    2970429733                                83C1D432178D5AB500141E68 /* SVGPathSegLinetoRel.h in Headers */,
     
    3141731446                                5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */,
    3141831447                                4969B0F213D0B33F00DF3521 /* HitTestingTransformState.cpp in Sources */,
     31448                                511CA6831F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.cpp in Sources */,
    3141931449                                2D8287F616E4A0380086BD00 /* HitTestLocation.cpp in Sources */,
    3142031450                                9307F1D70AF2D59000DBA31A /* HitTestResult.cpp in Sources */,
     
    3248132511                                E182568F0EF2B02D00933242 /* JSWorkerGlobalScope.cpp in Sources */,
    3248232512                                E1C36D340EB0A094007410BC /* JSWorkerGlobalScopeBase.cpp in Sources */,
     32513                                511CA6791F3904B10019E074 /* ServiceWorkerProvider.cpp in Sources */,
    3248332514                                E18258AC0EF3CD7000933242 /* JSWorkerGlobalScopeCustom.cpp in Sources */,
    3248432515                                E1C362F00EAF2AA9007410BC /* JSWorkerLocation.cpp in Sources */,
     
    3302633057                                A8DF4AF00980C42C0052981B /* RenderTableRow.cpp in Sources */,
    3302733058                                A8DF4AED0980C42C0052981B /* RenderTableSection.cpp in Sources */,
     33059                                511CA67D1F3905A60019E074 /* ServiceWorkerJob.cpp in Sources */,
    3302833060                                BCEA488B097D93020094C9E4 /* RenderText.cpp in Sources */,
    3302933061                                AB67D1A8097F3AE300F9392E /* RenderTextControl.cpp in Sources */,
  • trunk/Source/WebCore/dom/Document.cpp

    r220523 r220539  
    46894689SessionID Document::sessionID() const
    46904690{
    4691     auto* page = this->page();
    4692     return page ? page->sessionID() : SessionID();
     4691    if (m_sessionID.isValid())
     4692        return m_sessionID;
     4693
     4694    if (auto* page = this->page())
     4695        m_sessionID = page->sessionID();
     4696
     4697    return m_sessionID;
    46934698}
    46944699
  • trunk/Source/WebCore/dom/Document.h

    r220523 r220539  
    4646#include "RenderPtr.h"
    4747#include "ScriptExecutionContext.h"
     48#include "SessionID.h"
    4849#include "StringWithDirection.h"
    4950#include "Supplementable.h"
     
    18211822
    18221823    OrientationNotifier m_orientationNotifier;
     1824    mutable SessionID m_sessionID;
    18231825
    18241826    static bool hasEverCreatedAnAXObjectCache;
  • trunk/Source/WebCore/workers/ServiceWorkerContainer.cpp

    r220433 r220539  
    3333#include "NavigatorBase.h"
    3434#include "ScriptExecutionContext.h"
     35#include "SecurityOrigin.h"
     36#include "ServiceWorkerJob.h"
     37#include "ServiceWorkerProvider.h"
     38#include "ServiceWorkerRegistrationParameters.h"
    3539#include "URL.h"
    3640#include <wtf/RunLoop.h>
     
    4549
    4650    m_readyPromise.reject(Exception { UnknownError, ASCIILiteral("serviceWorker.ready() is not yet implemented") });
     51}
     52
     53ServiceWorkerContainer::~ServiceWorkerContainer()
     54{
     55#ifndef NDEBUG
     56    ASSERT(m_creationThread == currentThread());
     57#endif
    4758}
    4859
     
    6576{
    6677    auto* context = scriptExecutionContext();
    67     if (!context) {
     78    if (!context || !context->sessionID().isValid()) {
    6879        ASSERT_NOT_REACHED();
    6980        return;
     
    7586    }
    7687
    77     auto scriptURL = context->completeURL(relativeScriptURL);
    78     if (!scriptURL.isValid()) {
     88    ServiceWorkerRegistrationParameters parameters;
     89    parameters.scriptURL = context->completeURL(relativeScriptURL);
     90    if (!parameters.scriptURL.isValid()) {
    7991        promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a valid relative script URL") });
    8092        return;
     
    8294
    8395    // FIXME: The spec disallows scripts outside of HTTP(S), but we'll likely support app custom URL schemes in WebKit.
    84     if (!scriptURL.protocolIsInHTTPFamily()) {
     96    if (!parameters.scriptURL.protocolIsInHTTPFamily()) {
    8597        promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose protocol is either HTTP or HTTPS") });
    8698        return;
    8799    }
    88100
    89     String path = scriptURL.path();
     101    String path = parameters.scriptURL.path();
    90102    if (path.containsIgnoringASCIICase("%2f") || path.containsIgnoringASCIICase("%5c")) {
    91103        promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose path does not contain '%%2f' or '%%5c'") });
     
    94106
    95107    String scope = options.scope.isEmpty() ? ASCIILiteral("./") : options.scope;
    96     auto scopeURL = context->completeURL(scope);
     108    if (!scope.isEmpty())
     109        parameters.scopeURL = context->completeURL(scope);
    97110
    98     // FIXME: At this point, create a Register job and add it to the job queue
    99     UNUSED_PARAM(scopeURL);
     111    parameters.sessionID = context->sessionID();
     112    parameters.clientCreationURL = context->url();
     113    parameters.topOrigin = SecurityOriginData::fromSecurityOrigin(context->topOrigin());
     114    parameters.options = options;
    100115
    101     promise->reject(Exception { UnknownError, ASCIILiteral("serviceWorker.register() is not yet implemented") });
     116    scheduleJob(ServiceWorkerJob::createRegisterJob(*this, WTFMove(promise), WTFMove(parameters)));
     117}
     118
     119void ServiceWorkerContainer::scheduleJob(Ref<ServiceWorkerJob>&& job)
     120{
     121    ServiceWorkerJob& rawJob = job.get();
     122    auto result = m_jobMap.add(rawJob.identifier(), WTFMove(job));
     123    ASSERT_UNUSED(result, result.isNewEntry);
     124
     125    ServiceWorkerProvider::singleton().scheduleJob(rawJob);
    102126}
    103127
     
    116140}
    117141
     142void ServiceWorkerContainer::jobDidFinish(ServiceWorkerJob& job)
     143{
     144    auto taken = m_jobMap.take(job.identifier());
     145    ASSERT_UNUSED(taken, taken.get() == &job);
     146}
     147
    118148const char* ServiceWorkerContainer::activeDOMObjectName() const
    119149{
  • trunk/Source/WebCore/workers/ServiceWorkerContainer.h

    r220433 r220539  
    3131#include "DOMPromiseProxy.h"
    3232#include "EventTarget.h"
     33#include "ServiceWorkerJobClient.h"
    3334#include "ServiceWorkerRegistration.h"
     35#include "ServiceWorkerRegistrationOptions.h"
     36#include "SessionID.h"
     37#include <wtf/Threading.h>
    3438
    3539namespace WebCore {
     
    4246enum class WorkerType;
    4347
    44 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject {
     48class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject, public ServiceWorkerJobClient {
    4549public:
    4650    ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&);
    47     virtual ~ServiceWorkerContainer() = default;
     51    ~ServiceWorkerContainer();
    4852
    49     struct RegistrationOptions {
    50         String scope;
    51         WorkerType type;
    52         ServiceWorkerUpdateViaCache updateViaCache;
    53     };
     53    typedef WebCore::RegistrationOptions RegistrationOptions;
    5454
    5555    ServiceWorker* controller() const;
     
    6464    void startMessages();
    6565
     66    void ref() final { refEventTarget(); }
     67    void deref() final { derefEventTarget(); }
     68
    6669private:
     70    void scheduleJob(Ref<ServiceWorkerJob>&&);
     71    void jobDidFinish(ServiceWorkerJob&) final;
     72
    6773    const char* activeDOMObjectName() const final;
    6874    bool canSuspendForDocumentSuspension() const final;
     
    7581
    7682    NavigatorBase& m_navigator;
     83
     84    HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_jobMap;
     85
     86#ifndef NDEBUG
     87    ThreadIdentifier m_creationThread { currentThread() };
     88#endif
    7789};
    7890
  • trunk/Source/WebCore/workers/ServiceWorkerJob.h

    r220538 r220539  
    2828#if ENABLE(SERVICE_WORKER)
    2929
    30 #include "ActiveDOMObject.h"
    31 #include "DOMPromiseProxy.h"
    32 #include "EventTarget.h"
    33 #include "ServiceWorkerRegistration.h"
     30#include "ServiceWorkerJobClient.h"
     31#include <wtf/RefPtr.h>
     32#include <wtf/ThreadSafeRefCounted.h>
     33#include <wtf/Threading.h>
    3434
    3535namespace WebCore {
    3636
    3737class DeferredPromise;
    38 class NavigatorBase;
    39 class ServiceWorker;
     38class Exception;
     39struct ServiceWorkerRegistrationParameters;
    4040
    41 enum class ServiceWorkerUpdateViaCache;
    42 enum class WorkerType;
     41class ServiceWorkerJob : public ThreadSafeRefCounted<ServiceWorkerJob> {
     42public:
     43    static Ref<ServiceWorkerJob> createRegisterJob(ServiceWorkerJobClient& client, Ref<DeferredPromise>&& promise, ServiceWorkerRegistrationParameters&& parameters)
     44    {
     45        return adoptRef(*new ServiceWorkerJob(client, WTFMove(promise), WTFMove(parameters)));
     46    }
    4347
    44 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject {
    45 public:
    46     ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&);
    47     virtual ~ServiceWorkerContainer() = default;
     48    ~ServiceWorkerJob();
    4849
    49     struct RegistrationOptions {
    50         String scope;
    51         WorkerType type;
    52         ServiceWorkerUpdateViaCache updateViaCache;
    53     };
     50    WEBCORE_EXPORT void failedWithException(Exception&&);
    5451
    55     ServiceWorker* controller() const;
    56 
    57     using ReadyPromise = DOMPromiseProxy<IDLInterface<ServiceWorkerRegistration>>;
    58     ReadyPromise& ready() { return m_readyPromise; }
    59 
    60     void addRegistration(const String& scriptURL, const RegistrationOptions&, Ref<DeferredPromise>&&);
    61     void getRegistration(const String& url, Ref<DeferredPromise>&&);
    62     void getRegistrations(Ref<DeferredPromise>&&);
    63 
    64     void startMessages();
     52    uint64_t identifier() const { return m_identifier; }
    6553
    6654private:
    67     const char* activeDOMObjectName() const final;
    68     bool canSuspendForDocumentSuspension() const final;
    69     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
    70     EventTargetInterface eventTargetInterface() const final { return ServiceWorkerContainerEventTargetInterfaceType; }
    71     void refEventTarget() final;
    72     void derefEventTarget() final;
     55    ServiceWorkerJob(ServiceWorkerJobClient&, Ref<DeferredPromise>&&, ServiceWorkerRegistrationParameters&&);
    7356
    74     ReadyPromise m_readyPromise;
     57    Ref<ServiceWorkerJobClient> m_client;
     58    std::unique_ptr<ServiceWorkerRegistrationParameters> m_registrationParameters;
     59    Ref<DeferredPromise> m_promise;
    7560
    76     NavigatorBase& m_navigator;
     61    bool m_completed { false };
     62    uint64_t m_identifier;
     63
     64#if !ASSERT_DISABLED
     65    ThreadIdentifier m_creationThread { currentThread() };
     66#endif
    7767};
    7868
     
    8070
    8171#endif // ENABLE(SERVICE_WORKER)
     72
  • trunk/Source/WebCore/workers/ServiceWorkerRegistrationOptions.h

    r220538 r220539  
    2828#if ENABLE(SERVICE_WORKER)
    2929
    30 #include "ActiveDOMObject.h"
    31 #include "DOMPromiseProxy.h"
    32 #include "EventTarget.h"
    33 #include "ServiceWorkerRegistration.h"
     30#include <wtf/text/WTFString.h>
    3431
    3532namespace WebCore {
    36 
    37 class DeferredPromise;
    38 class NavigatorBase;
    39 class ServiceWorker;
    4033
    4134enum class ServiceWorkerUpdateViaCache;
    4235enum class WorkerType;
    4336
    44 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject {
    45 public:
    46     ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&);
    47     virtual ~ServiceWorkerContainer() = default;
    48 
    49     struct RegistrationOptions {
    50         String scope;
    51         WorkerType type;
    52         ServiceWorkerUpdateViaCache updateViaCache;
    53     };
    54 
    55     ServiceWorker* controller() const;
    56 
    57     using ReadyPromise = DOMPromiseProxy<IDLInterface<ServiceWorkerRegistration>>;
    58     ReadyPromise& ready() { return m_readyPromise; }
    59 
    60     void addRegistration(const String& scriptURL, const RegistrationOptions&, Ref<DeferredPromise>&&);
    61     void getRegistration(const String& url, Ref<DeferredPromise>&&);
    62     void getRegistrations(Ref<DeferredPromise>&&);
    63 
    64     void startMessages();
    65 
    66 private:
    67     const char* activeDOMObjectName() const final;
    68     bool canSuspendForDocumentSuspension() const final;
    69     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
    70     EventTargetInterface eventTargetInterface() const final { return ServiceWorkerContainerEventTargetInterfaceType; }
    71     void refEventTarget() final;
    72     void derefEventTarget() final;
    73 
    74     ReadyPromise m_readyPromise;
    75 
    76     NavigatorBase& m_navigator;
     37struct RegistrationOptions {
     38    String scope;
     39    WorkerType type;
     40    ServiceWorkerUpdateViaCache updateViaCache;
    7741};
    7842
  • trunk/Source/WebKit/CMakeLists.txt

    r220442 r220539  
    523523    WebProcess/Plugins/Netscape/NetscapePluginStream.cpp
    524524
     525    WebProcess/Storage/WebServiceWorkerProvider.cpp
    525526    WebProcess/Storage/WebToStorageProcessConnection.cpp
    526527
  • trunk/Source/WebKit/ChangeLog

    r220538 r220539  
     12017-08-10  Brady Eidson  <beidson@apple.com>
     2
     3        Add ServiceWorkerJob.
     4        https://bugs.webkit.org/show_bug.cgi?id=175241
     5
     6        Reviewed by Tim Horton.
     7
     8        * CMakeLists.txt:
     9        * WebKit.xcodeproj/project.pbxproj:
     10
     11        * WebProcess/Storage/WebServiceWorkerProvider.cpp: Added.
     12        (WebKit::WebServiceWorkerProvider::singleton):
     13        (WebKit::WebServiceWorkerProvider::WebServiceWorkerProvider):
     14        (WebKit::WebServiceWorkerProvider::scheduleJob):
     15        * WebProcess/Storage/WebServiceWorkerProvider.h: Added.
     16
     17        * WebProcess/WebProcess.cpp:
     18        (WebKit::WebProcess::initializeWebProcess):
     19
    1202017-08-10  Tim Horton  <timothy_horton@apple.com>
    221
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r220501 r220539  
    10511051                51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */; };
    10521052                51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1053                51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */; };
     1054                51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */; };
    10531055                51C0C9741DDD76000032CAD3 /* IconLoadingDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */; };
    10541056                51C0C9751DDD76030032CAD3 /* IconLoadingDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */; };
     
    33223324                51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnvironmentUtilities.cpp; path = unix/EnvironmentUtilities.cpp; sourceTree = "<group>"; };
    33233325                51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnvironmentUtilities.h; path = unix/EnvironmentUtilities.h; sourceTree = "<group>"; };
     3326                51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebServiceWorkerProvider.cpp; sourceTree = "<group>"; };
     3327                51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebServiceWorkerProvider.h; sourceTree = "<group>"; };
    33243328                51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IconLoadingDelegate.h; sourceTree = "<group>"; };
    33253329                51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IconLoadingDelegate.mm; sourceTree = "<group>"; };
     
    60276031                        isa = PBXGroup;
    60286032                        children = (
     6033                                51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */,
     6034                                51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */,
    60296035                                5118E9991F295259003EF9F5 /* WebToStorageProcessConnection.cpp */,
    60306036                                5118E99A1F295259003EF9F5 /* WebToStorageProcessConnection.h */,
     
    88268832                                1A1E093418861D3800D2DC49 /* WebProgressTrackerClient.h in Headers */,
    88278833                                512F589D12A8838800629530 /* WebProtectionSpace.h in Headers */,
     8834                                51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */,
    88288835                                37948404150C350600E52CE9 /* WebRenderLayer.h in Headers */,
    88298836                                3760881F150413E900FC82C7 /* WebRenderObject.h in Headers */,
     
    1036510372                                C0337DD3127A2A0E008FF4F4 /* WebKeyboardEvent.cpp in Sources */,
    1036610373                                1A6280F31919982A006AD9F9 /* WebKit.m in Sources */,
     10374                                51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */,
    1036710375                                BC9BA5041697C45300E44616 /* WebKit2Initialize.cpp in Sources */,
    1036810376                                465250E61ECF52DC002025CB /* WebKit2InitializeCocoa.mm in Sources */,
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r220416 r220539  
    6464#include "WebProcessProxyMessages.h"
    6565#include "WebResourceLoadStatisticsStoreMessages.h"
     66#include "WebServiceWorkerProvider.h"
    6667#include "WebSocketStream.h"
    6768#include "WebToStorageProcessConnection.h"
     
    393394#endif
    394395
     396#if ENABLE(SERVICE_WORKER)
     397    ServiceWorkerProvider::setSharedProvider(WebServiceWorkerProvider::singleton());
     398#endif
     399
    395400#if ENABLE(WEBASSEMBLY)
    396401    JSC::Wasm::enableFastMemory();
Note: See TracChangeset for help on using the changeset viewer.