Changeset 223277 in webkit
- Timestamp:
- Oct 12, 2017 11:44:47 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 15 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r223271 r223277 1 2017-10-12 Brady Eidson <beidson@apple.com> 2 3 SW "Hello world". 4 https://bugs.webkit.org/show_bug.cgi?id=178187 5 6 Reviewed by Andy Estes. 7 8 * http/tests/workers/service/basic-register-exceptions-expected.txt: 9 * http/tests/workers/service/basic-register-expected.txt: 10 * http/tests/workers/service/registration-task-queue-scheduling-1-expected.txt: 11 1 12 2017-10-12 Alex Christensen <achristensen@webkit.org> 2 13 -
trunk/LayoutTests/http/tests/workers/service/basic-register-exceptions-expected.txt
r223191 r223277 5 5 CONSOLE MESSAGE: line 60: Registration failed with error: TypeError: Scope URL provided to serviceWorker.register() must be either HTTP or HTTPS 6 6 CONSOLE MESSAGE: line 70: Registration failed with error: TypeError: Scope URL provided to serviceWorker.register() cannot have a path that contains '%2f' or '%5c' 7 CONSOLE MESSAGE: line 10: Registration failed with error: UnknownError: Failed to start service worker script of length 07 CONSOLE MESSAGE: line 10: Registration failed with error: UnknownError: Worker script successfully started, but it has no way to communicate yet 8 8 CONSOLE MESSAGE: line 80: Registration failed with error: SecurityError: Script origin does not match the registering client's origin 9 9 CONSOLE MESSAGE: line 91: Registration failed with error: SecurityError: Scope origin does not match the registering client's origin -
trunk/LayoutTests/http/tests/workers/service/basic-register-expected.txt
r223191 r223277 1 CONSOLE MESSAGE: line 10: Registration failed with error: UnknownError: Failed to start service worker script of length 412 CONSOLE MESSAGE: line 21: Registration failed with error: UnknownError: Failed to start service worker script of length 01 CONSOLE MESSAGE: line 10: Registration failed with error: UnknownError: Worker script successfully started, but it has no way to communicate yet 2 CONSOLE MESSAGE: line 21: Registration failed with error: UnknownError: Worker script successfully started, but it has no way to communicate yet 3 3 -
trunk/LayoutTests/http/tests/workers/service/registration-task-queue-scheduling-1-expected.txt
r223191 r223277 1 ALERT: Unexpected error received from server: UnknownError: Failed to start service worker script of length 411 ALERT: Unexpected error received from server: UnknownError: Worker script successfully started, but it has no way to communicate yet 2 2 -
trunk/Source/WebCore/ChangeLog
r223271 r223277 1 2017-10-12 Brady Eidson <beidson@apple.com> 2 3 SW "Hello world". 4 https://bugs.webkit.org/show_bug.cgi?id=178187 5 6 Reviewed by Andy Estes. 7 8 No new tests (Covered by changes to existing tests). 9 10 With this patch, SW scripts are actually compiled and run inside a ServiceWorkerGlobalScope environment 11 in the SW context process. 12 13 * WebCore.xcodeproj/project.pbxproj: 14 15 * bindings/js/WorkerScriptController.cpp: 16 (WebCore::WorkerScriptController::initScript): 17 18 * dom/EventTargetFactory.in: 19 20 * workers/WorkerGlobalScope.h: 21 (WebCore::WorkerGlobalScope::isServiceWorkerGlobalScope const): 22 23 * workers/service/ServiceWorkerContextData.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp. 24 (WebCore::ServiceWorkerContextData::isolatedCopy const): 25 * workers/service/ServiceWorkerContextData.h: 26 (WebCore::ServiceWorkerContextData::encode const): 27 (WebCore::ServiceWorkerContextData::decode): 28 29 * workers/service/ServiceWorkerGlobalScope.cpp: 30 (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope): 31 (WebCore::ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope): 32 (WebCore::ServiceWorkerGlobalScope::registration): 33 (WebCore::ServiceWorkerGlobalScope::eventTargetInterface const): 34 * workers/service/ServiceWorkerGlobalScope.h: 35 (WebCore::ServiceWorkerGlobalScope::create): 36 (WebCore::ServiceWorkerGlobalScope::serverConnectionIdentifier const): 37 38 * workers/service/context/SWContextManager.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp. 39 (WebCore::SWContextManager::singleton): 40 (WebCore::SWContextManager::SWContextManager): 41 (WebCore::SWContextManager::startServiceWorkerContext): 42 * workers/service/context/SWContextManager.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.h. 43 44 * workers/service/context/ServiceWorkerThread.cpp: Added. 45 (WebCore::ServiceWorkerThreadProxy::sharedDummyProxy): 46 (WebCore::ServiceWorkerThread::ServiceWorkerThread): 47 (WebCore::m_workerObjectProxy): 48 (WebCore::ServiceWorkerThread::~ServiceWorkerThread): 49 (WebCore::ServiceWorkerThread::createWorkerGlobalScope): 50 (WebCore::ServiceWorkerThread::runEventLoop): 51 * workers/service/context/ServiceWorkerThread.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.h. 52 (WebCore::ServiceWorkerThread::create): 53 (WebCore::ServiceWorkerThread::workerObjectProxy const): 54 55 * workers/service/server/SWServer.cpp: 56 (WebCore::SWServer::createWorker): 57 1 58 2017-10-12 Alex Christensen <achristensen@webkit.org> 2 59 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r223271 r223277 2353 2353 517B25A91CC82B2A0061C011 /* IDBConnectionProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517B25A71CC820320061C011 /* IDBConnectionProxy.cpp */; }; 2354 2354 517B25AA1CC82B2A0061C011 /* IDBConnectionProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 517B25A81CC820320061C011 /* IDBConnectionProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2355 517C870A1F8EBB2500EB8076 /* SWContextManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517C87081F8EB9BF00EB8076 /* SWContextManager.cpp */; }; 2356 517C870B1F8EBB2500EB8076 /* SWContextManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 517C87091F8EB9C000EB8076 /* SWContextManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2357 517C87181F8FD4D900EB8076 /* ServiceWorkerContextData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517C87161F8FD4D300EB8076 /* ServiceWorkerContextData.cpp */; }; 2355 2358 517DEEE51DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 517DEEE31DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm */; }; 2356 2359 517DEEE81DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 517DEEE71DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2455 2458 51BA4ACB1BBC5BD900DF3D6D /* MemoryIDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */; }; 2456 2459 51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2460 51BCCE2F1F8F1795006BA0ED /* ServiceWorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517C87111F8EE72F00EB8076 /* ServiceWorkerThread.cpp */; }; 2461 51BCCE301F8F179E006BA0ED /* ServiceWorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 517C87101F8EE72E00EB8076 /* ServiceWorkerThread.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2457 2462 51BE37E00DAEE00E001085FC /* StorageArea.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BE37DE0DAEE00E001085FC /* StorageArea.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2458 2463 51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0AA380F2AA10A001648C2 /* CachedFrame.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 10288 10293 517B25A71CC820320061C011 /* IDBConnectionProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBConnectionProxy.cpp; sourceTree = "<group>"; }; 10289 10294 517B25A81CC820320061C011 /* IDBConnectionProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBConnectionProxy.h; sourceTree = "<group>"; }; 10295 517C87081F8EB9BF00EB8076 /* SWContextManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SWContextManager.cpp; path = workers/service/context/SWContextManager.cpp; sourceTree = SOURCE_ROOT; }; 10296 517C87091F8EB9C000EB8076 /* SWContextManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SWContextManager.h; path = workers/service/context/SWContextManager.h; sourceTree = SOURCE_ROOT; }; 10297 517C87101F8EE72E00EB8076 /* ServiceWorkerThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ServiceWorkerThread.h; path = workers/service/context/ServiceWorkerThread.h; sourceTree = SOURCE_ROOT; }; 10298 517C87111F8EE72F00EB8076 /* ServiceWorkerThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ServiceWorkerThread.cpp; path = workers/service/context/ServiceWorkerThread.cpp; sourceTree = SOURCE_ROOT; }; 10299 517C87161F8FD4D300EB8076 /* ServiceWorkerContextData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerContextData.cpp; sourceTree = "<group>"; }; 10290 10300 517DEEE31DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingMomentumCalculatorMac.mm; sourceTree = "<group>"; }; 10291 10301 517DEEE71DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingMomentumCalculatorMac.h; sourceTree = "<group>"; }; … … 19133 19143 sourceTree = "<group>"; 19134 19144 }; 19145 517C87071F8E8FF200EB8076 /* context */ = { 19146 isa = PBXGroup; 19147 children = ( 19148 517C87081F8EB9BF00EB8076 /* SWContextManager.cpp */, 19149 517C87091F8EB9C000EB8076 /* SWContextManager.h */, 19150 517C87111F8EE72F00EB8076 /* ServiceWorkerThread.cpp */, 19151 517C87101F8EE72E00EB8076 /* ServiceWorkerThread.h */, 19152 ); 19153 path = context; 19154 sourceTree = "<group>"; 19155 }; 19135 19156 5182C24C1F3142090059BA7C /* ServiceWorkers */ = { 19136 19157 isa = PBXGroup; … … 19213 19234 isa = PBXGroup; 19214 19235 children = ( 19236 517C87071F8E8FF200EB8076 /* context */, 19215 19237 517A52EC1F47532D00DCDC0A /* server */, 19216 19238 51F1755B1F3EBC0C00C74950 /* ServiceWorker.cpp */, … … 19220 19242 51F175571F3EBC0C00C74950 /* ServiceWorkerContainer.h */, 19221 19243 51F175561F3EBC0C00C74950 /* ServiceWorkerContainer.idl */, 19244 517C87161F8FD4D300EB8076 /* ServiceWorkerContextData.cpp */, 19222 19245 51CA7EE71F8832E0003D3131 /* ServiceWorkerContextData.h */, 19223 19246 517A535C1F5899F200DCDC0A /* ServiceWorkerFetchResult.h */, … … 28628 28651 413C2C341BC29A8F0075204C /* JSDOMConstructor.h in Headers */, 28629 28652 930841341CDDB15500B0958C /* JSDOMConvert.h in Headers */, 28653 517C870B1F8EBB2500EB8076 /* SWContextManager.h in Headers */, 28630 28654 7C8E34AD1E4A33AF0054CE23 /* JSDOMConvertAny.h in Headers */, 28631 28655 7C8E34AE1E4A33AF0054CE23 /* JSDOMConvertBase.h in Headers */, … … 30414 30438 B22279C80D00BF220071B782 /* SVGFEBlendElement.h in Headers */, 30415 30439 B22279CB0D00BF220071B782 /* SVGFEColorMatrixElement.h in Headers */, 30440 51BCCE301F8F179E006BA0ED /* ServiceWorkerThread.h in Headers */, 30416 30441 B22279CE0D00BF220071B782 /* SVGFEComponentTransferElement.h in Headers */, 30417 30442 B22279D10D00BF220071B782 /* SVGFECompositeElement.h in Headers */, … … 31590 31615 E43AF8E61AC5B7E800CA717E /* CacheValidation.cpp in Sources */, 31591 31616 49AE2D96134EE5F90072920A /* CalculationValue.cpp in Sources */, 31617 517C87181F8FD4D900EB8076 /* ServiceWorkerContextData.cpp in Sources */, 31592 31618 952076041F2675FE007D2AAB /* CallTracer.cpp in Sources */, 31593 31619 415CDAF41E6B8F87004F11EE /* CanvasCaptureMediaStreamTrack.cpp in Sources */, … … 32232 32258 B2ED97710B1F55CE00257D0F /* GraphicsContextCG.cpp in Sources */, 32233 32259 B277B4040B22F37C0004BEC6 /* GraphicsContextCocoa.mm in Sources */, 32260 51BCCE2F1F8F1795006BA0ED /* ServiceWorkerThread.cpp in Sources */, 32234 32261 0F580B0C0F12A2690051D689 /* GraphicsLayer.cpp in Sources */, 32235 32262 499B3ED6128CD31400E726C2 /* GraphicsLayerCA.cpp in Sources */, … … 33545 33572 C90F65551B2253B1002163A1 /* MediaSessionManager.cpp in Sources */, 33546 33573 CD669D681D23364B004D1866 /* MediaSessionManagerCocoa.cpp in Sources */, 33574 517C870A1F8EBB2500EB8076 /* SWContextManager.cpp in Sources */, 33547 33575 07638A9A1884487200E15A1B /* MediaSessionManagerIOS.mm in Sources */, 33548 33576 07EDC3EE1AACB75D00983EB5 /* MediaSessionManagerMac.mm in Sources */, -
trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp
r218951 r223277 31 31 #include "JSDedicatedWorkerGlobalScope.h" 32 32 #include "JSEventTarget.h" 33 #include "JSServiceWorkerGlobalScope.h" 33 34 #include "ScriptSourceCode.h" 34 35 #include "WebCoreJSClientData.h" … … 93 94 proxy->setTarget(*m_vm, m_workerGlobalScopeWrapper.get()); 94 95 proxy->structure()->setGlobalObject(*m_vm, m_workerGlobalScopeWrapper.get()); 95 } 96 #if ENABLE(SERVICE_WORKER) 97 } else if (m_workerGlobalScope->isServiceWorkerGlobalScope()) { 98 Structure* contextPrototypeStructure = JSServiceWorkerGlobalScopePrototype::createStructure(*m_vm, nullptr, jsNull()); 99 Strong<JSServiceWorkerGlobalScopePrototype> contextPrototype(*m_vm, JSServiceWorkerGlobalScopePrototype::create(*m_vm, nullptr, contextPrototypeStructure)); 100 Structure* structure = JSServiceWorkerGlobalScope::createStructure(*m_vm, nullptr, contextPrototype.get()); 101 auto* proxyStructure = JSProxy::createStructure(*m_vm, nullptr, jsNull(), PureForwardingProxyType); 102 auto* proxy = JSProxy::create(*m_vm, proxyStructure); 103 104 m_workerGlobalScopeWrapper.set(*m_vm, JSServiceWorkerGlobalScope::create(*m_vm, structure, static_cast<ServiceWorkerGlobalScope&>(*m_workerGlobalScope), proxy)); 105 contextPrototypeStructure->setGlobalObject(*m_vm, m_workerGlobalScopeWrapper.get()); 106 ASSERT(structure->globalObject() == m_workerGlobalScopeWrapper); 107 ASSERT(m_workerGlobalScopeWrapper->structure()->globalObject() == m_workerGlobalScopeWrapper); 108 contextPrototype->structure()->setGlobalObject(*m_vm, m_workerGlobalScopeWrapper.get()); 109 contextPrototype->structure()->setPrototypeWithoutTransition(*m_vm, JSWorkerGlobalScope::prototype(*m_vm, *m_workerGlobalScopeWrapper.get())); 110 111 proxy->setTarget(*m_vm, m_workerGlobalScopeWrapper.get()); 112 proxy->structure()->setGlobalObject(*m_vm, m_workerGlobalScopeWrapper.get()); 113 #endif 114 } 115 96 116 ASSERT(m_workerGlobalScopeWrapper->globalObject() == m_workerGlobalScopeWrapper); 97 117 ASSERT(asObject(m_workerGlobalScopeWrapper->getPrototypeDirect())->globalObject() == m_workerGlobalScopeWrapper); -
trunk/Source/WebCore/dom/EventTargetFactory.in
r222692 r223277 33 33 ServiceWorker conditional=SERVICE_WORKER 34 34 ServiceWorkerContainer conditional=SERVICE_WORKER 35 ServiceWorkerGlobalScope conditional=SERVICE_WORKER 35 36 ServiceWorkerRegistration conditional=SERVICE_WORKER 36 37 SourceBuffer conditional=MEDIA_SOURCE -
trunk/Source/WebCore/workers/WorkerGlobalScope.h
r220887 r223277 60 60 61 61 virtual bool isDedicatedWorkerGlobalScope() const { return false; } 62 virtual bool isServiceWorkerGlobalScope() const { return false; } 62 63 63 64 const URL& url() const final { return m_url; } -
trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp
r223274 r223277 25 25 26 26 #include "config.h" 27 #include "ServiceWorker GlobalScope.h"27 #include "ServiceWorkerContextData.h" 28 28 29 29 #if ENABLE(SERVICE_WORKER) … … 31 31 namespace WebCore { 32 32 33 ServiceWorker Registration& ServiceWorkerGlobalScope::registration()33 ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() const 34 34 { 35 return m_registration; 36 } 37 38 void ServiceWorkerGlobalScope::skipWaiting(Ref<DeferredPromise>&&) 39 { 35 return { registrationKey.isolatedCopy(), workerID.isolatedCopy(), script.isolatedCopy(), scriptURL.isolatedCopy() }; 40 36 } 41 37 -
trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h
r223191 r223277 27 27 28 28 #include "ServiceWorkerRegistrationKey.h" 29 #include "URL.h" 29 30 30 31 #if ENABLE(SERVICE_WORKER) … … 36 37 String workerID; 37 38 String script; 39 URL scriptURL; 38 40 39 41 template<class Encoder> void encode(Encoder&) const; 40 42 template<class Decoder> static std::optional<ServiceWorkerContextData> decode(Decoder&); 43 44 ServiceWorkerContextData isolatedCopy() const; 41 45 }; 42 46 … … 44 48 void ServiceWorkerContextData::encode(Encoder& encoder) const 45 49 { 46 encoder << registrationKey << workerID << script ;50 encoder << registrationKey << workerID << script << scriptURL; 47 51 } 48 52 … … 62 66 return std::nullopt; 63 67 64 return {{ WTFMove(*registrationKey), WTFMove(workerID), WTFMove(script) }}; 68 URL scriptURL; 69 if (!decoder.decode(scriptURL)) 70 return std::nullopt; 71 72 return {{ WTFMove(*registrationKey), WTFMove(workerID), WTFMove(script), WTFMove(scriptURL) }}; 65 73 } 66 74 -
trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp
r220623 r223277 29 29 #if ENABLE(SERVICE_WORKER) 30 30 31 #include "ServiceWorkerThread.h" 32 31 33 namespace WebCore { 34 35 ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData& data, const URL& url, const String& identifier, const String& userAgent, ServiceWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, PAL::SessionID sessionID) 36 : WorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider, sessionID) 37 , m_serverConnectionIdentifier(serverConnectionIdentifier) 38 , m_contextData(crossThreadCopy(data)) 39 { 40 } 41 42 ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope() 43 { 44 } 32 45 33 46 ServiceWorkerRegistration& ServiceWorkerGlobalScope::registration() 34 47 { 35 return m_registration; 48 // FIXME: Is this method still needed? 49 RELEASE_ASSERT_NOT_REACHED(); 36 50 } 37 51 … … 40 54 } 41 55 56 EventTargetInterface ServiceWorkerGlobalScope::eventTargetInterface() const 57 { 58 return ServiceWorkerGlobalScopeEventTargetInterfaceType; 59 } 60 42 61 } // namespace WebCore 43 62 -
trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h
r220623 r223277 28 28 #if ENABLE(SERVICE_WORKER) 29 29 30 #include "ServiceWorkerContextData.h" 30 31 #include "ServiceWorkerRegistration.h" 31 32 #include "WorkerGlobalScope.h" … … 34 35 35 36 class DeferredPromise; 36 class ServiceWorker Registration;37 class ServiceWorkerThread; 37 38 38 39 class ServiceWorkerGlobalScope : public WorkerGlobalScope { 39 40 public: 41 template<typename... Args> static Ref<ServiceWorkerGlobalScope> create(Args&&... args) 42 { 43 return adoptRef(*new ServiceWorkerGlobalScope(std::forward<Args>(args)...)); 44 } 45 46 virtual ~ServiceWorkerGlobalScope(); 47 48 bool isServiceWorkerGlobalScope() const final { return true; } 49 40 50 ServiceWorkerRegistration& registration(); 51 52 uint64_t serverConnectionIdentifier() const { return m_serverConnectionIdentifier; } 41 53 42 54 void skipWaiting(Ref<DeferredPromise>&&); 43 55 56 EventTargetInterface eventTargetInterface() const final; 57 44 58 private: 45 ServiceWorkerRegistration m_registration; 59 ServiceWorkerGlobalScope(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData&, const URL&, const String& identifier, const String& userAgent, ServiceWorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, PAL::SessionID); 60 61 uint64_t m_serverConnectionIdentifier; 62 ServiceWorkerContextData m_contextData; 46 63 }; 47 64 -
trunk/Source/WebCore/workers/service/context/SWContextManager.cpp
r223274 r223277 25 25 26 26 #include "config.h" 27 #include "S erviceWorkerGlobalScope.h"27 #include "SWContextManager.h" 28 28 29 29 #if ENABLE(SERVICE_WORKER) 30 30 31 #include "Logging.h" 32 #include <pal/SessionID.h> 33 34 using namespace PAL; 35 31 36 namespace WebCore { 32 37 33 S erviceWorkerRegistration& ServiceWorkerGlobalScope::registration()38 SWContextManager& SWContextManager::singleton() 34 39 { 35 return m_registration; 40 static SWContextManager* sharedManager = new SWContextManager; 41 return *sharedManager; 36 42 } 37 43 38 void ServiceWorkerGlobalScope::skipWaiting(Ref<DeferredPromise>&&)44 SWContextManager::SWContextManager() 39 45 { 46 47 } 48 49 ExceptionOr<uint64_t> SWContextManager::startServiceWorkerContext(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData& data) 50 { 51 // FIXME: Provide a sensical session ID 52 53 auto thread = ServiceWorkerThread::create(serverConnectionIdentifier, data, SessionID::defaultSessionID()); 54 auto result = m_workerThreadMap.add(thread->identifier(), WTFMove(thread)); 55 ASSERT(result.isNewEntry); 56 57 result.iterator->value->start(); 58 59 LOG(ServiceWorker, "Context process PID: %i started worker thread %s\n", getpid(), data.workerID.utf8().data()); 60 61 // FIXME: For testing purposes we need to signal a failure with an exception payload. 62 // Later with more APIs and infrastructure filled in, testing will be much easier. 63 64 return Exception { UnknownError, "Worker script successfully started, but it has no way to communicate yet" }; 40 65 } 41 66 -
trunk/Source/WebCore/workers/service/context/SWContextManager.h
r223274 r223277 28 28 #if ENABLE(SERVICE_WORKER) 29 29 30 #include "ServiceWorkerRegistration.h" 31 #include "WorkerGlobalScope.h" 30 #include "ExceptionOr.h" 31 #include "ServiceWorkerThread.h" 32 #include <wtf/HashMap.h> 32 33 33 34 namespace WebCore { 34 35 35 class DeferredPromise; 36 class ServiceWorkerRegistration; 36 struct ServiceWorkerContextData; 37 37 38 class S erviceWorkerGlobalScope : public WorkerGlobalScope{38 class SWContextManager { 39 39 public: 40 ServiceWorkerRegistration& registration();40 WEBCORE_EXPORT static SWContextManager& singleton(); 41 41 42 void skipWaiting(Ref<DeferredPromise>&&);42 WEBCORE_EXPORT ExceptionOr<uint64_t> startServiceWorkerContext(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData&); 43 43 44 44 private: 45 ServiceWorkerRegistration m_registration; 45 SWContextManager(); 46 47 HashMap<uint64_t, RefPtr<ServiceWorkerThread>> m_workerThreadMap; 46 48 }; 47 49 -
trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h
r223274 r223277 28 28 #if ENABLE(SERVICE_WORKER) 29 29 30 #include "ServiceWorkerRegistration.h" 31 #include "WorkerGlobalScope.h" 30 #include "ServiceWorkerContextData.h" 31 #include "WorkerThread.h" 32 #include <wtf/Identified.h> 32 33 33 34 namespace WebCore { 34 35 35 class DeferredPromise; 36 class ServiceWorkerRegistration; 36 class ContentSecurityPolicyResponseHeaders; 37 class WorkerObjectProxy; 38 struct ServiceWorkerContextData; 37 39 38 class ServiceWorker GlobalScope : public WorkerGlobalScope{40 class ServiceWorkerThread : public WorkerThread, public ThreadSafeIdentified<ServiceWorkerThread> { 39 41 public: 40 ServiceWorkerRegistration& registration(); 42 template<typename... Args> static Ref<ServiceWorkerThread> create(Args&&... args) 43 { 44 return adoptRef(*new ServiceWorkerThread(std::forward<Args>(args)...)); 45 } 46 virtual ~ServiceWorkerThread(); 41 47 42 void skipWaiting(Ref<DeferredPromise>&&); 48 WorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; } 49 50 protected: 51 Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, PAL::SessionID) final; 52 void runEventLoop() override; 43 53 44 54 private: 45 ServiceWorkerRegistration m_registration; 55 ServiceWorkerThread(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData&, PAL::SessionID); 56 57 uint64_t m_serverConnectionIdentifier; 58 ServiceWorkerContextData m_data; 59 WorkerObjectProxy& m_workerObjectProxy; 46 60 }; 47 61 -
trunk/Source/WebCore/workers/service/server/SWServer.cpp
r223191 r223277 165 165 ASSERT(result.isNewEntry); 166 166 167 connection.startServiceWorkerContext({ registrationKey, workerID, script });167 connection.startServiceWorkerContext({ registrationKey, workerID, script, url }); 168 168 169 169 return result.iterator->value.get(); -
trunk/Source/WebKit/ChangeLog
r223270 r223277 1 2017-10-12 Brady Eidson <beidson@apple.com> 2 3 SW "Hello world". 4 https://bugs.webkit.org/show_bug.cgi?id=178187 5 6 Reviewed by Andy Estes. 7 8 * WebProcess/WebProcess.cpp: 9 (WebKit::WebProcess::startServiceWorkerContext): 10 1 11 2017-10-12 Alex Christensen <achristensen@webkit.org> 2 12 -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r223270 r223277 106 106 #include <WebCore/ResourceLoadStatistics.h> 107 107 #include <WebCore/RuntimeApplicationChecks.h> 108 #include <WebCore/SWContextManager.h> 108 109 #include <WebCore/SchemeRegistry.h> 109 110 #include <WebCore/SecurityOrigin.h> … … 1650 1651 void WebProcess::startServiceWorkerContext(uint64_t serverConnectionIdentifier, const ServiceWorkerContextData& data) 1651 1652 { 1652 // FIXME: Here is where we will actually start the script. 1653 // For now we bounce back a failure message to the requesting process for test coverage. 1654 1655 auto message = makeString("Failed to start service worker script of length ", String::number(data.script.length())); 1656 m_workerContextConnection->send(Messages::StorageProcess::ServiceWorkerContextFailedToStart(serverConnectionIdentifier, data.registrationKey, data.workerID, message), 0); 1653 auto contextResult = SWContextManager::singleton().startServiceWorkerContext(serverConnectionIdentifier, data); 1654 1655 if (contextResult.hasException()) 1656 m_workerContextConnection->send(Messages::StorageProcess::ServiceWorkerContextFailedToStart(serverConnectionIdentifier, data.registrationKey, data.workerID, contextResult.exception().message()), 0); 1657 1657 } 1658 1658
Note: See TracChangeset
for help on using the changeset viewer.