Changeset 220539 in webkit
- Timestamp:
- Aug 10, 2017 12:28:26 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 14 added
- 14 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r220535 r220539 1 2017-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 1 17 2017-08-10 Commit Queue <commit-queue@webkit.org> 2 18 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r220507 r220539 391 391 # requires wk2 speculative tiling 392 392 fast/images/low-memory-decode.html [ Skip ] 393 394 http/tests/workers/service [ Skip ] -
trunk/LayoutTests/platform/win/TestExpectations
r220507 r220539 4073 4073 imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any.html [ Slow ] 4074 4074 4075 http/tests/workers/service [ Skip ] -
trunk/Source/WebCore/CMakeLists.txt
r220532 r220539 2980 2980 workers/ServiceWorkerContainer.cpp 2981 2981 workers/ServiceWorkerGlobalScope.cpp 2982 workers/ServiceWorkerJob.cpp 2983 workers/ServiceWorkerProvider.cpp 2982 2984 workers/ServiceWorkerRegistration.cpp 2985 workers/ServiceWorkerRegistrationParameters.cpp 2983 2986 workers/Worker.cpp 2984 2987 workers/WorkerConsoleClient.cpp -
trunk/Source/WebCore/ChangeLog
r220538 r220539 1 2017-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 1 51 2017-08-10 Tim Horton <timothy_horton@apple.com> 2 52 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r220506 r220539 2168 2168 510D4A38103165EE0049EA54 /* SocketStreamHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2169 2169 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, ); }; }; 2170 2177 511EC1271C50AACA0032F983 /* IDBSerialization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511EC1251C50AA570032F983 /* IDBSerialization.cpp */; }; 2171 2178 511EC1281C50AACA0032F983 /* IDBSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 511EC1261C50AA570032F983 /* IDBSerialization.h */; }; … … 2312 2319 5182C23F1F313A090059BA7C /* ServiceWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23B1F3139FC0059BA7C /* ServiceWorker.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2313 2320 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 */; }; 2315 2322 5182C2421F313A090059BA7C /* ServiceWorkerGlobalScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5182C2361F3139FC0059BA7C /* ServiceWorkerGlobalScope.cpp */; }; 2316 2323 5182C2431F313A090059BA7C /* ServiceWorkerGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2417 2424 51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2418 2425 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, ); }; }; 2419 2427 51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0AA380F2AA10A001648C2 /* CachedFrame.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2420 2428 51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */; }; … … 9884 9892 510D4A32103165EE0049EA54 /* SocketStreamHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketStreamHandleClient.h; sourceTree = "<group>"; }; 9885 9893 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>"; }; 9886 9901 511EC1251C50AA570032F983 /* IDBSerialization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSerialization.cpp; sourceTree = "<group>"; }; 9887 9902 511EC1261C50AA570032F983 /* IDBSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSerialization.h; sourceTree = "<group>"; }; … … 10134 10149 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryIDBBackingStore.h; sourceTree = "<group>"; }; 10135 10150 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>"; }; 10136 10152 51C0AA380F2AA10A001648C2 /* CachedFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedFrame.h; sourceTree = "<group>"; }; 10137 10153 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedFrame.cpp; sourceTree = "<group>"; }; … … 17498 17514 5182C23A1F3139FC0059BA7C /* ServiceWorkerGlobalScope.h */, 17499 17515 5182C2391F3139FC0059BA7C /* ServiceWorkerGlobalScope.idl */, 17516 511CA67C1F3905710019E074 /* ServiceWorkerJob.cpp */, 17517 511CA67B1F3905710019E074 /* ServiceWorkerJob.h */, 17518 511CA67F1F39331B0019E074 /* ServiceWorkerJobClient.h */, 17519 511CA6771F3904AA0019E074 /* ServiceWorkerProvider.cpp */, 17520 511CA6781F3904AA0019E074 /* ServiceWorkerProvider.h */, 17500 17521 5182C2341F3139FC0059BA7C /* ServiceWorkerRegistration.cpp */, 17501 17522 5182C2371F3139FC0059BA7C /* ServiceWorkerRegistration.h */, 17502 17523 5182C2321F3139FC0059BA7C /* ServiceWorkerRegistration.idl */, 17524 51BEB6381F3B94AB005029B9 /* ServiceWorkerRegistrationOptions.h */, 17525 511CA6821F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.cpp */, 17526 511CA6811F3A3CD50019E074 /* ServiceWorkerRegistrationParameters.h */, 17503 17527 51F174FD1F35898800C74950 /* ServiceWorkerUpdateViaCache.h */, 17504 17528 51F174FB1F3588D700C74950 /* ServiceWorkerUpdateViaCache.idl */, … … 26741 26765 A584FE2618637DAB00843B10 /* CommandLineAPIModuleSource.h in Headers */, 26742 26766 6550B6A2099DF0270090D781 /* Comment.h in Headers */, 26767 511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */, 26743 26768 57E664FC1E73703300765536 /* CommonCryptoDERUtilities.h in Headers */, 26744 26769 E1FE137518402A6700892F13 /* CommonCryptoUtilities.h in Headers */, … … 27458 27483 977B3867122883E900B81FF8 /* HTMLDocumentParser.h in Headers */, 27459 27484 93F198E608245E59001E9ABC /* HTMLElement.h in Headers */, 27485 51BEB6391F3B94B0005029B9 /* ServiceWorkerRegistrationOptions.h in Headers */, 27460 27486 A17C81230F2A5CF7005DAAEB /* HTMLElementFactory.h in Headers */, 27461 27487 977B37241228721700B81FF8 /* HTMLElementStack.h in Headers */, … … 28712 28738 07EE76EF1BEA619800F89133 /* MockRealtimeVideoSourceMac.h in Headers */, 28713 28739 CDF2B0171820540700F2B424 /* MockSourceBufferPrivate.h in Headers */, 28740 511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */, 28714 28741 CDF2B0191820540700F2B424 /* MockTracks.h in Headers */, 28715 28742 C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */, … … 29024 29051 41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */, 29025 29052 BC4368E80C226E32005EFB5F /* Rect.h in Headers */, 29053 511CA6841F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.h in Headers */, 29026 29054 FD45A958175D414C00C21EC8 /* RectangleShape.h in Headers */, 29027 29055 9831AE4A154225C900FE2644 /* ReferrerPolicy.h in Headers */, … … 29701 29729 B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */, 29702 29730 83C1D430178D5AB500141E68 /* SVGPathSegLinetoHorizontalAbs.h in Headers */, 29731 511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */, 29703 29732 83C1D431178D5AB500141E68 /* SVGPathSegLinetoHorizontalRel.h in Headers */, 29704 29733 83C1D432178D5AB500141E68 /* SVGPathSegLinetoRel.h in Headers */, … … 31417 31446 5160F4980B0AA75F00C1D2AF /* HistoryItemMac.mm in Sources */, 31418 31447 4969B0F213D0B33F00DF3521 /* HitTestingTransformState.cpp in Sources */, 31448 511CA6831F3A3CD90019E074 /* ServiceWorkerRegistrationParameters.cpp in Sources */, 31419 31449 2D8287F616E4A0380086BD00 /* HitTestLocation.cpp in Sources */, 31420 31450 9307F1D70AF2D59000DBA31A /* HitTestResult.cpp in Sources */, … … 32481 32511 E182568F0EF2B02D00933242 /* JSWorkerGlobalScope.cpp in Sources */, 32482 32512 E1C36D340EB0A094007410BC /* JSWorkerGlobalScopeBase.cpp in Sources */, 32513 511CA6791F3904B10019E074 /* ServiceWorkerProvider.cpp in Sources */, 32483 32514 E18258AC0EF3CD7000933242 /* JSWorkerGlobalScopeCustom.cpp in Sources */, 32484 32515 E1C362F00EAF2AA9007410BC /* JSWorkerLocation.cpp in Sources */, … … 33026 33057 A8DF4AF00980C42C0052981B /* RenderTableRow.cpp in Sources */, 33027 33058 A8DF4AED0980C42C0052981B /* RenderTableSection.cpp in Sources */, 33059 511CA67D1F3905A60019E074 /* ServiceWorkerJob.cpp in Sources */, 33028 33060 BCEA488B097D93020094C9E4 /* RenderText.cpp in Sources */, 33029 33061 AB67D1A8097F3AE300F9392E /* RenderTextControl.cpp in Sources */, -
trunk/Source/WebCore/dom/Document.cpp
r220523 r220539 4689 4689 SessionID Document::sessionID() const 4690 4690 { 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; 4693 4698 } 4694 4699 -
trunk/Source/WebCore/dom/Document.h
r220523 r220539 46 46 #include "RenderPtr.h" 47 47 #include "ScriptExecutionContext.h" 48 #include "SessionID.h" 48 49 #include "StringWithDirection.h" 49 50 #include "Supplementable.h" … … 1821 1822 1822 1823 OrientationNotifier m_orientationNotifier; 1824 mutable SessionID m_sessionID; 1823 1825 1824 1826 static bool hasEverCreatedAnAXObjectCache; -
trunk/Source/WebCore/workers/ServiceWorkerContainer.cpp
r220433 r220539 33 33 #include "NavigatorBase.h" 34 34 #include "ScriptExecutionContext.h" 35 #include "SecurityOrigin.h" 36 #include "ServiceWorkerJob.h" 37 #include "ServiceWorkerProvider.h" 38 #include "ServiceWorkerRegistrationParameters.h" 35 39 #include "URL.h" 36 40 #include <wtf/RunLoop.h> … … 45 49 46 50 m_readyPromise.reject(Exception { UnknownError, ASCIILiteral("serviceWorker.ready() is not yet implemented") }); 51 } 52 53 ServiceWorkerContainer::~ServiceWorkerContainer() 54 { 55 #ifndef NDEBUG 56 ASSERT(m_creationThread == currentThread()); 57 #endif 47 58 } 48 59 … … 65 76 { 66 77 auto* context = scriptExecutionContext(); 67 if (!context ) {78 if (!context || !context->sessionID().isValid()) { 68 79 ASSERT_NOT_REACHED(); 69 80 return; … … 75 86 } 76 87 77 auto scriptURL = context->completeURL(relativeScriptURL); 78 if (!scriptURL.isValid()) { 88 ServiceWorkerRegistrationParameters parameters; 89 parameters.scriptURL = context->completeURL(relativeScriptURL); 90 if (!parameters.scriptURL.isValid()) { 79 91 promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a valid relative script URL") }); 80 92 return; … … 82 94 83 95 // 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()) { 85 97 promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose protocol is either HTTP or HTTPS") }); 86 98 return; 87 99 } 88 100 89 String path = scriptURL.path();101 String path = parameters.scriptURL.path(); 90 102 if (path.containsIgnoringASCIICase("%2f") || path.containsIgnoringASCIICase("%5c")) { 91 103 promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() must be called with a script URL whose path does not contain '%%2f' or '%%5c'") }); … … 94 106 95 107 String scope = options.scope.isEmpty() ? ASCIILiteral("./") : options.scope; 96 auto scopeURL = context->completeURL(scope); 108 if (!scope.isEmpty()) 109 parameters.scopeURL = context->completeURL(scope); 97 110 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; 100 115 101 promise->reject(Exception { UnknownError, ASCIILiteral("serviceWorker.register() is not yet implemented") }); 116 scheduleJob(ServiceWorkerJob::createRegisterJob(*this, WTFMove(promise), WTFMove(parameters))); 117 } 118 119 void 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); 102 126 } 103 127 … … 116 140 } 117 141 142 void ServiceWorkerContainer::jobDidFinish(ServiceWorkerJob& job) 143 { 144 auto taken = m_jobMap.take(job.identifier()); 145 ASSERT_UNUSED(taken, taken.get() == &job); 146 } 147 118 148 const char* ServiceWorkerContainer::activeDOMObjectName() const 119 149 { -
trunk/Source/WebCore/workers/ServiceWorkerContainer.h
r220433 r220539 31 31 #include "DOMPromiseProxy.h" 32 32 #include "EventTarget.h" 33 #include "ServiceWorkerJobClient.h" 33 34 #include "ServiceWorkerRegistration.h" 35 #include "ServiceWorkerRegistrationOptions.h" 36 #include "SessionID.h" 37 #include <wtf/Threading.h> 34 38 35 39 namespace WebCore { … … 42 46 enum class WorkerType; 43 47 44 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject {48 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject, public ServiceWorkerJobClient { 45 49 public: 46 50 ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&); 47 virtual ~ServiceWorkerContainer() = default;51 ~ServiceWorkerContainer(); 48 52 49 struct RegistrationOptions { 50 String scope; 51 WorkerType type; 52 ServiceWorkerUpdateViaCache updateViaCache; 53 }; 53 typedef WebCore::RegistrationOptions RegistrationOptions; 54 54 55 55 ServiceWorker* controller() const; … … 64 64 void startMessages(); 65 65 66 void ref() final { refEventTarget(); } 67 void deref() final { derefEventTarget(); } 68 66 69 private: 70 void scheduleJob(Ref<ServiceWorkerJob>&&); 71 void jobDidFinish(ServiceWorkerJob&) final; 72 67 73 const char* activeDOMObjectName() const final; 68 74 bool canSuspendForDocumentSuspension() const final; … … 75 81 76 82 NavigatorBase& m_navigator; 83 84 HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_jobMap; 85 86 #ifndef NDEBUG 87 ThreadIdentifier m_creationThread { currentThread() }; 88 #endif 77 89 }; 78 90 -
trunk/Source/WebCore/workers/ServiceWorkerJob.h
r220538 r220539 28 28 #if ENABLE(SERVICE_WORKER) 29 29 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> 34 34 35 35 namespace WebCore { 36 36 37 37 class DeferredPromise; 38 class NavigatorBase;39 class ServiceWorker;38 class Exception; 39 struct ServiceWorkerRegistrationParameters; 40 40 41 enum class ServiceWorkerUpdateViaCache; 42 enum class WorkerType; 41 class ServiceWorkerJob : public ThreadSafeRefCounted<ServiceWorkerJob> { 42 public: 43 static Ref<ServiceWorkerJob> createRegisterJob(ServiceWorkerJobClient& client, Ref<DeferredPromise>&& promise, ServiceWorkerRegistrationParameters&& parameters) 44 { 45 return adoptRef(*new ServiceWorkerJob(client, WTFMove(promise), WTFMove(parameters))); 46 } 43 47 44 class ServiceWorkerContainer final : public EventTargetWithInlineData, public ActiveDOMObject { 45 public: 46 ServiceWorkerContainer(ScriptExecutionContext&, NavigatorBase&); 47 virtual ~ServiceWorkerContainer() = default; 48 ~ServiceWorkerJob(); 48 49 49 struct RegistrationOptions { 50 String scope; 51 WorkerType type; 52 ServiceWorkerUpdateViaCache updateViaCache; 53 }; 50 WEBCORE_EXPORT void failedWithException(Exception&&); 54 51 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; } 65 53 66 54 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; 55 ServiceWorkerJob(ServiceWorkerJobClient&, Ref<DeferredPromise>&&, ServiceWorkerRegistrationParameters&&); 73 56 74 ReadyPromise m_readyPromise; 57 Ref<ServiceWorkerJobClient> m_client; 58 std::unique_ptr<ServiceWorkerRegistrationParameters> m_registrationParameters; 59 Ref<DeferredPromise> m_promise; 75 60 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 77 67 }; 78 68 … … 80 70 81 71 #endif // ENABLE(SERVICE_WORKER) 72 -
trunk/Source/WebCore/workers/ServiceWorkerRegistrationOptions.h
r220538 r220539 28 28 #if ENABLE(SERVICE_WORKER) 29 29 30 #include "ActiveDOMObject.h" 31 #include "DOMPromiseProxy.h" 32 #include "EventTarget.h" 33 #include "ServiceWorkerRegistration.h" 30 #include <wtf/text/WTFString.h> 34 31 35 32 namespace WebCore { 36 37 class DeferredPromise;38 class NavigatorBase;39 class ServiceWorker;40 33 41 34 enum class ServiceWorkerUpdateViaCache; 42 35 enum class WorkerType; 43 36 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; 37 struct RegistrationOptions { 38 String scope; 39 WorkerType type; 40 ServiceWorkerUpdateViaCache updateViaCache; 77 41 }; 78 42 -
trunk/Source/WebKit/CMakeLists.txt
r220442 r220539 523 523 WebProcess/Plugins/Netscape/NetscapePluginStream.cpp 524 524 525 WebProcess/Storage/WebServiceWorkerProvider.cpp 525 526 WebProcess/Storage/WebToStorageProcessConnection.cpp 526 527 -
trunk/Source/WebKit/ChangeLog
r220538 r220539 1 2017-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 1 20 2017-08-10 Tim Horton <timothy_horton@apple.com> 2 21 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r220501 r220539 1051 1051 51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */; }; 1052 1052 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 */; }; 1053 1055 51C0C9741DDD76000032CAD3 /* IconLoadingDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */; }; 1054 1056 51C0C9751DDD76030032CAD3 /* IconLoadingDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */; }; … … 3322 3324 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnvironmentUtilities.cpp; path = unix/EnvironmentUtilities.cpp; sourceTree = "<group>"; }; 3323 3325 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>"; }; 3324 3328 51C0C9721DDD74F00032CAD3 /* IconLoadingDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IconLoadingDelegate.h; sourceTree = "<group>"; }; 3325 3329 51C0C9731DDD74F00032CAD3 /* IconLoadingDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IconLoadingDelegate.mm; sourceTree = "<group>"; }; … … 6027 6031 isa = PBXGroup; 6028 6032 children = ( 6033 51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */, 6034 51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */, 6029 6035 5118E9991F295259003EF9F5 /* WebToStorageProcessConnection.cpp */, 6030 6036 5118E99A1F295259003EF9F5 /* WebToStorageProcessConnection.h */, … … 8826 8832 1A1E093418861D3800D2DC49 /* WebProgressTrackerClient.h in Headers */, 8827 8833 512F589D12A8838800629530 /* WebProtectionSpace.h in Headers */, 8834 51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */, 8828 8835 37948404150C350600E52CE9 /* WebRenderLayer.h in Headers */, 8829 8836 3760881F150413E900FC82C7 /* WebRenderObject.h in Headers */, … … 10365 10372 C0337DD3127A2A0E008FF4F4 /* WebKeyboardEvent.cpp in Sources */, 10366 10373 1A6280F31919982A006AD9F9 /* WebKit.m in Sources */, 10374 51BEB62B1F3A5AD7005029B9 /* WebServiceWorkerProvider.cpp in Sources */, 10367 10375 BC9BA5041697C45300E44616 /* WebKit2Initialize.cpp in Sources */, 10368 10376 465250E61ECF52DC002025CB /* WebKit2InitializeCocoa.mm in Sources */, -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r220416 r220539 64 64 #include "WebProcessProxyMessages.h" 65 65 #include "WebResourceLoadStatisticsStoreMessages.h" 66 #include "WebServiceWorkerProvider.h" 66 67 #include "WebSocketStream.h" 67 68 #include "WebToStorageProcessConnection.h" … … 393 394 #endif 394 395 396 #if ENABLE(SERVICE_WORKER) 397 ServiceWorkerProvider::setSharedProvider(WebServiceWorkerProvider::singleton()); 398 #endif 399 395 400 #if ENABLE(WEBASSEMBLY) 396 401 JSC::Wasm::enableFastMemory();
Note: See TracChangeset
for help on using the changeset viewer.