Diff
Modified: trunk/LayoutTests/ChangeLog (225030 => 225031)
--- trunk/LayoutTests/ChangeLog 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/LayoutTests/ChangeLog 2017-11-19 07:19:00 UTC (rev 225031)
@@ -1,3 +1,14 @@
+2017-11-18 Chris Dumez <[email protected]>
+
+ ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
+ https://bugs.webkit.org/show_bug.cgi?id=179846
+
+ Reviewed by Darin Adler.
+
+ Unskip test that use to flakily crash.
+
+ * platform/mac/TestExpectations:
+
2017-11-18 Nan Wang <[email protected]>
AX: AOM: Implement number type properties
Modified: trunk/LayoutTests/platform/mac/TestExpectations (225030 => 225031)
--- trunk/LayoutTests/platform/mac/TestExpectations 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2017-11-19 07:19:00 UTC (rev 225031)
@@ -1752,4 +1752,3 @@
[ HighSierra+ ] imported/w3c/web-platform-tests/media-source/mediasource-redundant-seek.html [ Failure ]
[ HighSierra+ ] imported/w3c/web-platform-tests/media-source/mediasource-remove.html [ Failure ]
-webkit.org/b/179846 imported/w3c/web-platform-tests/service-workers/service-worker/getregistration.https.html [ Skip ]
Modified: trunk/Source/WTF/ChangeLog (225030 => 225031)
--- trunk/Source/WTF/ChangeLog 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WTF/ChangeLog 2017-11-19 07:19:00 UTC (rev 225031)
@@ -1,3 +1,17 @@
+2017-11-18 Chris Dumez <[email protected]>
+
+ ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
+ https://bugs.webkit.org/show_bug.cgi?id=179846
+
+ Reviewed by Darin Adler.
+
+ Add a generateThreadSafeObjectIdentifier() for generating an ObjectIdentifier
+ in a thread-safe manner, using std::atomic.
+
+ * wtf/ObjectIdentifier.h:
+ (WTF::generateObjectIdentifier):
+ (WTF::generateThreadSafeObjectIdentifier):
+
2017-11-18 Yusuke Suzuki <[email protected]>
[WTF] Remove CPU(HPPA) in StackBounds by using runtime stack direction test
Modified: trunk/Source/WTF/wtf/ObjectIdentifier.h (225030 => 225031)
--- trunk/Source/WTF/wtf/ObjectIdentifier.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WTF/wtf/ObjectIdentifier.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -25,7 +25,9 @@
#pragma once
+#include <atomic>
#include <wtf/HashTraits.h>
+#include <wtf/NeverDestroyed.h>
#include <wtf/text/WTFString.h>
namespace WTF {
@@ -73,6 +75,7 @@
private:
template<typename U> friend ObjectIdentifier<U> generateObjectIdentifier();
+ template<typename U> friend ObjectIdentifier<U> generateThreadSafeObjectIdentifier();
template<typename U> friend ObjectIdentifier<U> makeObjectIdentifier(uint64_t);
friend struct HashTraits<ObjectIdentifier>;
template<typename U> friend struct ObjectIdentifierHash;
@@ -86,16 +89,20 @@
}
uint64_t m_identifier { 0 };
- static uint64_t s_currentIdentifier;
};
-template<typename T> uint64_t ObjectIdentifier<T>::s_currentIdentifier;
-
template<typename T> inline ObjectIdentifier<T> generateObjectIdentifier()
{
- return ObjectIdentifier<T> { ++ObjectIdentifier<T>::s_currentIdentifier };
+ static uint64_t currentIdentifier;
+ return ObjectIdentifier<T> { ++currentIdentifier };
}
+template<typename T> inline ObjectIdentifier<T> generateThreadSafeObjectIdentifier()
+{
+ static NeverDestroyed<std::atomic<uint64_t>> currentIdentifier;
+ return ObjectIdentifier<T> { ++currentIdentifier.get() };
+}
+
template<typename T> inline ObjectIdentifier<T> makeObjectIdentifier(uint64_t identifier)
{
return ObjectIdentifier<T> { identifier };
@@ -117,4 +124,5 @@
using WTF::ObjectIdentifier;
using WTF::generateObjectIdentifier;
+using WTF::generateThreadSafeObjectIdentifier;
using WTF::makeObjectIdentifier;
Modified: trunk/Source/WebCore/ChangeLog (225030 => 225031)
--- trunk/Source/WebCore/ChangeLog 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/ChangeLog 2017-11-19 07:19:00 UTC (rev 225031)
@@ -1,3 +1,102 @@
+2017-11-18 Chris Dumez <[email protected]>
+
+ ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
+ https://bugs.webkit.org/show_bug.cgi?id=179846
+
+ Reviewed by Darin Adler.
+
+ We have seen crashes on the bots in SWServerJobQueue because methods such as scriptContextStarted()
+ can get called after the jobQueue has been cleared. This is because when a jobQueue is cleared,
+ an asynchronous operation may be pending (e.g. script fetch, service worker starting, install event).
+
+ To address the issue, we now pass the identifier of the job that started the asynchronous operation
+ when calling the methods on SWServerJobQueue. If the identifier does not match the identifier of
+ the current job in the JobQueue, we ignore it.
+
+ This patch also starts using a strongly typed identifier (ServiceWorkerJobIdentifier) for
+ ServiceWorkerJob, instead of a uint64_t. It also introduces a ServiceWorkerJobDataIdentifier type
+ which contains both a SWServerConnectionIdentifier and a ServiceWorkerJobIdentifier. This is useful
+ because ServiceWorkerJobData is passed to the StorageProcess and it needs a globally unique identifier.
+ ServiceWorkerJobIdentifier is only guaranteed to be unique within a single WebProcess. Augmenting it
+ with the SWServerConnectionIdentifier of the WebProcess makes it globally unique.
+
+ No new tests, unskipped exiting test.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * workers/service/ServiceWorkerContainer.cpp:
+ (WebCore::ServiceWorkerContainer::scheduleJob):
+ (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
+ (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
+ (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
+ (WebCore::ServiceWorkerContainer::jobDidFinish):
+ * workers/service/ServiceWorkerContainer.h:
+ * workers/service/ServiceWorkerContextData.cpp:
+ (WebCore::ServiceWorkerContextData::isolatedCopy const):
+ * workers/service/ServiceWorkerContextData.h:
+ (WebCore::ServiceWorkerContextData::encode const):
+ (WebCore::ServiceWorkerContextData::decode):
+ * workers/service/ServiceWorkerFetchResult.h:
+ (WebCore::ServiceWorkerFetchResult::encode const):
+ (WebCore::ServiceWorkerFetchResult::decode):
+ * workers/service/ServiceWorkerJob.h:
+ (WebCore::ServiceWorkerJob::identifier const):
+ * workers/service/ServiceWorkerJobData.cpp:
+ (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
+ (WebCore::ServiceWorkerJobData::isolatedCopy const):
+ * workers/service/ServiceWorkerJobData.h:
+ (WebCore::ServiceWorkerJobData::connectionIdentifier const):
+ (WebCore::ServiceWorkerJobData::identifier const):
+ (WebCore::ServiceWorkerJobData::encode const):
+ (WebCore::ServiceWorkerJobData::decode):
+ * workers/service/ServiceWorkerJobDataIdentifier.h: Copied from Source/WebCore/workers/service/ServiceWorkerFetchResult.h.
+ (WebCore::ServiceWorkerJobDataIdentifier::operator== const):
+ (WebCore::ServiceWorkerJobDataIdentifier::loggingString const):
+ (WebCore::ServiceWorkerJobDataIdentifier::encode const):
+ (WebCore::ServiceWorkerJobDataIdentifier::decode):
+ * workers/service/ServiceWorkerTypes.h:
+ * workers/service/context/SWContextManager.cpp:
+ (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
+ * workers/service/context/SWContextManager.h:
+ * workers/service/context/ServiceWorkerThread.cpp:
+ (WebCore::ServiceWorkerThread::fireInstallEvent):
+ * workers/service/server/SWClientConnection.cpp:
+ (WebCore::SWClientConnection::scheduleJob):
+ (WebCore::SWClientConnection::finishedFetchingScript):
+ (WebCore::SWClientConnection::failedFetchingScript):
+ (WebCore::SWClientConnection::jobRejectedInServer):
+ (WebCore::SWClientConnection::registrationJobResolvedInServer):
+ (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
+ (WebCore::SWClientConnection::startScriptFetchForServer):
+ * workers/service/server/SWClientConnection.h:
+ * workers/service/server/SWServer.cpp:
+ (WebCore::SWServer::Connection::scheduleJobInServer):
+ (WebCore::SWServer::rejectJob):
+ (WebCore::SWServer::resolveRegistrationJob):
+ (WebCore::SWServer::startScriptFetch):
+ (WebCore::SWServer::scriptFetchFinished):
+ (WebCore::SWServer::scriptContextFailedToStart):
+ (WebCore::SWServer::scriptContextStarted):
+ (WebCore::SWServer::didFinishInstall):
+ (WebCore::SWServer::updateWorker):
+ * workers/service/server/SWServer.h:
+ * workers/service/server/SWServerJobQueue.cpp:
+ (WebCore::SWServerJobQueue::isCurrentlyProcessingJob const):
+ (WebCore::SWServerJobQueue::scriptFetchFinished):
+ (WebCore::SWServerJobQueue::scriptContextFailedToStart):
+ (WebCore::SWServerJobQueue::scriptContextStarted):
+ (WebCore::SWServerJobQueue::didFinishInstall):
+ * workers/service/server/SWServerJobQueue.h:
+ * workers/service/server/SWServerToContextConnection.cpp:
+ (WebCore::SWServerToContextConnection::scriptContextFailedToStart):
+ (WebCore::SWServerToContextConnection::scriptContextStarted):
+ (WebCore::SWServerToContextConnection::didFinishInstall):
+ * workers/service/server/SWServerToContextConnection.h:
+ * workers/service/server/SWServerWorker.cpp:
+ (WebCore::SWServerWorker::scriptContextFailedToStart):
+ (WebCore::SWServerWorker::scriptContextStarted):
+ (WebCore::SWServerWorker::didFinishInstall):
+ * workers/service/server/SWServerWorker.h:
+
2017-11-18 Nan Wang <[email protected]>
AX: AOM: Implement number type properties
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (225030 => 225031)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2017-11-19 07:19:00 UTC (rev 225031)
@@ -2202,6 +2202,7 @@
837FB3451F9EA06D00D0FC31 /* ExtendableMessageEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 837FB3401F9EA06600D0FC31 /* ExtendableMessageEvent.h */; };
8386A96D19F61B2E00E1EC4A /* StyleBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8386A96C19F61B2E00E1EC4A /* StyleBuilder.h */; };
838867351D13BA5F003697D0 /* RenderObjectEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 838867341D13BA59003697D0 /* RenderObjectEnums.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 838CA6BD1FC0DFE9005D9FA5 /* ServiceWorkerJobDataIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 838CA6BB1FC0DFDD005D9FA5 /* ServiceWorkerJobDataIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
838EF5381DC149E2008F0C39 /* IDBTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 838EF5361DC149DA008F0C39 /* IDBTransactionMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
838EF53C1DC14A7C008F0C39 /* JSIDBTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 838EF53A1DC14A75008F0C39 /* JSIDBTransactionMode.h */; };
838F86DA1F509E7400E8CFC5 /* FileCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 838F86D81F509E6C00E8CFC5 /* FileCallback.h */; };
@@ -9455,6 +9456,7 @@
8386A96E19F61E4F00E1EC4A /* StyleBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleBuilder.cpp; sourceTree = "<group>"; };
838867341D13BA59003697D0 /* RenderObjectEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderObjectEnums.h; sourceTree = "<group>"; };
838869EB1CE81E9E00D16A9E /* JSTextCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextCustom.cpp; sourceTree = "<group>"; };
+ 838CA6BB1FC0DFDD005D9FA5 /* ServiceWorkerJobDataIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerJobDataIdentifier.h; sourceTree = "<group>"; };
838EF5361DC149DA008F0C39 /* IDBTransactionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBTransactionMode.h; sourceTree = "<group>"; };
838EF5371DC149DA008F0C39 /* IDBTransactionMode.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBTransactionMode.idl; sourceTree = "<group>"; };
838EF5391DC14A75008F0C39 /* JSIDBTransactionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBTransactionMode.cpp; sourceTree = "<group>"; };
@@ -17293,6 +17295,7 @@
51F175501F3EBC0C00C74950 /* ServiceWorkerJobClient.h */,
517A53241F4B904A00DCDC0A /* ServiceWorkerJobData.cpp */,
51F645661F45399F00B54DED /* ServiceWorkerJobData.h */,
+ 838CA6BB1FC0DFDD005D9FA5 /* ServiceWorkerJobDataIdentifier.h */,
51F645651F45399F00B54DED /* ServiceWorkerJobType.h */,
51F1754F1F3EBC0C00C74950 /* ServiceWorkerProvider.cpp */,
51F1754E1F3EBC0C00C74950 /* ServiceWorkerProvider.h */,
@@ -28949,6 +28952,7 @@
51F175631F3EBC8300C74950 /* ServiceWorkerJob.h in Headers */,
51F175641F3EBC8300C74950 /* ServiceWorkerJobClient.h in Headers */,
51F645691F4539B900B54DED /* ServiceWorkerJobData.h in Headers */,
+ 838CA6BD1FC0DFE9005D9FA5 /* ServiceWorkerJobDataIdentifier.h in Headers */,
51F6456A1F4539C000B54DED /* ServiceWorkerJobType.h in Headers */,
51F175661F3EBC8300C74950 /* ServiceWorkerProvider.h in Headers */,
51F175681F3EBC8300C74950 /* ServiceWorkerRegistration.h in Headers */,
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -197,7 +197,7 @@
setPendingActivity(this);
ServiceWorkerJob& rawJob = job.get();
- auto result = m_jobMap.add(rawJob.data().identifier(), WTFMove(job));
+ auto result = m_jobMap.add(rawJob.identifier(), WTFMove(job));
ASSERT_UNUSED(result, result.isNewEntry);
m_swConnection->scheduleJob(rawJob);
@@ -345,7 +345,7 @@
void ServiceWorkerContainer::startScriptFetchForJob(ServiceWorkerJob& job)
{
- LOG(ServiceWorker, "SeviceWorkerContainer %p starting script fetch for job %" PRIu64, this, job.data().identifier());
+ LOG(ServiceWorker, "SeviceWorkerContainer %p starting script fetch for job %s", this, job.identifier().loggingString().utf8().data());
auto* context = scriptExecutionContext();
if (!context) {
@@ -360,7 +360,7 @@
void ServiceWorkerContainer::jobFinishedLoadingScript(ServiceWorkerJob& job, const String& script)
{
- LOG(ServiceWorker, "SeviceWorkerContainer %p finished fetching script for job %" PRIu64, this, job.data().identifier());
+ LOG(ServiceWorker, "SeviceWorkerContainer %p finished fetching script for job %s", this, job.identifier().loggingString().utf8().data());
m_swConnection->finishedFetchingScript(job, script);
}
@@ -367,7 +367,7 @@
void ServiceWorkerContainer::jobFailedLoadingScript(ServiceWorkerJob& job, const ResourceError& error, std::optional<Exception>&& exception)
{
- LOG(ServiceWorker, "SeviceWorkerContainer %p failed fetching script for job %" PRIu64, this, job.data().identifier());
+ LOG(ServiceWorker, "SeviceWorkerContainer %p failed fetching script for job %s", this, job.identifier().loggingString().utf8().data());
if (exception)
job.promise().reject(*exception);
@@ -377,7 +377,7 @@
void ServiceWorkerContainer::jobDidFinish(ServiceWorkerJob& job)
{
- auto taken = m_jobMap.take(job.data().identifier());
+ auto taken = m_jobMap.take(job.identifier());
ASSERT_UNUSED(taken, !taken || taken->ptr() == &job);
unsetPendingActivity(this);
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -111,7 +111,7 @@
NavigatorBase& m_navigator;
RefPtr<SWClientConnection> m_swConnection;
- HashMap<uint64_t, Ref<ServiceWorkerJob>> m_jobMap;
+ HashMap<ServiceWorkerJobIdentifier, Ref<ServiceWorkerJob>> m_jobMap;
bool m_isStopped { false };
HashMap<ServiceWorkerRegistrationIdentifier, ServiceWorkerRegistration*> m_registrations;
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -32,7 +32,7 @@
ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() const
{
- return { registrationKey.isolatedCopy(), serviceWorkerIdentifier, script.isolatedCopy(), scriptURL.isolatedCopy(), workerType };
+ return { jobDataIdentifier, registrationKey.isolatedCopy(), serviceWorkerIdentifier, script.isolatedCopy(), scriptURL.isolatedCopy(), workerType };
}
} // namespace WebCore
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -26,6 +26,7 @@
#pragma once
#include "ServiceWorkerIdentifier.h"
+#include "ServiceWorkerJobDataIdentifier.h"
#include "ServiceWorkerRegistrationKey.h"
#include "URL.h"
#include "WorkerType.h"
@@ -35,6 +36,7 @@
namespace WebCore {
struct ServiceWorkerContextData {
+ ServiceWorkerJobDataIdentifier jobDataIdentifier;
ServiceWorkerRegistrationKey registrationKey;
ServiceWorkerIdentifier serviceWorkerIdentifier;
String script;
@@ -50,12 +52,17 @@
template<class Encoder>
void ServiceWorkerContextData::encode(Encoder& encoder) const
{
- encoder << registrationKey << serviceWorkerIdentifier << script << scriptURL << workerType;
+ encoder << jobDataIdentifier << registrationKey << serviceWorkerIdentifier << script << scriptURL << workerType;
}
template<class Decoder>
std::optional<ServiceWorkerContextData> ServiceWorkerContextData::decode(Decoder& decoder)
{
+ std::optional<ServiceWorkerJobDataIdentifier> jobDataIdentifier;
+ decoder >> jobDataIdentifier;
+ if (!jobDataIdentifier)
+ return std::nullopt;
+
auto registrationKey = ServiceWorkerRegistrationKey::decode(decoder);
if (!registrationKey)
return std::nullopt;
@@ -76,7 +83,7 @@
if (!decoder.decodeEnum(workerType))
return std::nullopt;
- return {{ WTFMove(*registrationKey), WTFMove(*serviceWorkerIdentifier), WTFMove(script), WTFMove(scriptURL), workerType }};
+ return {{ WTFMove(*jobDataIdentifier), WTFMove(*registrationKey), WTFMove(*serviceWorkerIdentifier), WTFMove(script), WTFMove(scriptURL), workerType }};
}
} // namespace WebCore
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -34,8 +34,7 @@
namespace WebCore {
struct ServiceWorkerFetchResult {
- uint64_t jobIdentifier;
- SWServerConnectionIdentifier connectionIdentifier;
+ ServiceWorkerJobDataIdentifier jobDataIdentifier;
ServiceWorkerRegistrationKey registrationKey;
String script;
ResourceError scriptError;
@@ -47,20 +46,17 @@
template<class Encoder>
void ServiceWorkerFetchResult::encode(Encoder& encoder) const
{
- encoder << jobIdentifier << connectionIdentifier << registrationKey << script << scriptError;
+ encoder << jobDataIdentifier << registrationKey << script << scriptError;
}
template<class Decoder>
bool ServiceWorkerFetchResult::decode(Decoder& decoder, ServiceWorkerFetchResult& result)
{
- if (!decoder.decode(result.jobIdentifier))
+ std::optional<ServiceWorkerJobDataIdentifier> jobDataIdentifier;
+ decoder >> jobDataIdentifier;
+ if (!jobDataIdentifier)
return false;
-
- std::optional<SWServerConnectionIdentifier> connectionIdentifier;
- decoder >> connectionIdentifier;
- if (!connectionIdentifier)
- return false;
- result.connectionIdentifier = *connectionIdentifier;
+ result.jobDataIdentifier = WTFMove(*jobDataIdentifier);
auto registrationKey = ServiceWorkerRegistrationKey::decode(decoder);
if (!registrationKey)
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -30,6 +30,7 @@
#include "ResourceResponse.h"
#include "ServiceWorkerJobClient.h"
#include "ServiceWorkerJobData.h"
+#include "ServiceWorkerTypes.h"
#include "WorkerScriptLoader.h"
#include "WorkerScriptLoaderClient.h"
#include <wtf/RefPtr.h>
@@ -59,6 +60,9 @@
void resolvedWithUnregistrationResult(bool);
void startScriptFetch();
+ using Identifier = ServiceWorkerJobIdentifier;
+ Identifier identifier() const { return m_jobData.identifier().jobIdentifier; }
+
ServiceWorkerJobData data() const { return m_jobData; }
DeferredPromise& promise() { return m_promise.get(); }
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJobData.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJobData.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJobData.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -30,14 +30,13 @@
namespace WebCore {
-ServiceWorkerJobData::ServiceWorkerJobData(uint64_t jobIdentifier, SWServerConnectionIdentifier connectionIdentifier)
- : ThreadSafeIdentified(jobIdentifier)
- , m_connectionIdentifier(connectionIdentifier)
+ServiceWorkerJobData::ServiceWorkerJobData(const Identifier& identifier)
+ : m_identifier(identifier)
{
}
ServiceWorkerJobData::ServiceWorkerJobData(SWServerConnectionIdentifier connectionIdentifier)
- : m_connectionIdentifier(connectionIdentifier)
+ : m_identifier { connectionIdentifier, generateThreadSafeObjectIdentifier<ServiceWorkerJobIdentifierType>() }
{
}
@@ -50,7 +49,7 @@
ServiceWorkerJobData ServiceWorkerJobData::isolatedCopy() const
{
- ServiceWorkerJobData result { identifier(), m_connectionIdentifier };
+ ServiceWorkerJobData result { identifier() };
result.type = type;
result.scriptURL = scriptURL.isolatedCopy();
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJobData.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJobData.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJobData.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -28,22 +28,22 @@
#if ENABLE(SERVICE_WORKER)
#include "SecurityOriginData.h"
+#include "ServiceWorkerJobDataIdentifier.h"
#include "ServiceWorkerJobType.h"
#include "ServiceWorkerRegistrationKey.h"
#include "ServiceWorkerRegistrationOptions.h"
#include "ServiceWorkerTypes.h"
#include "URL.h"
-#include <wtf/Identified.h>
namespace WebCore {
-struct ServiceWorkerJobData : public ThreadSafeIdentified<ServiceWorkerJobData> {
-public:
+struct ServiceWorkerJobData {
+ using Identifier = ServiceWorkerJobDataIdentifier;
explicit ServiceWorkerJobData(SWServerConnectionIdentifier);
ServiceWorkerJobData(const ServiceWorkerJobData&) = default;
ServiceWorkerJobData() = default;
- SWServerConnectionIdentifier connectionIdentifier() const { return m_connectionIdentifier; }
+ SWServerConnectionIdentifier connectionIdentifier() const { return m_identifier.connectionIdentifier; }
URL scriptURL;
URL clientCreationURL;
@@ -53,6 +53,7 @@
RegistrationOptions registrationOptions;
+ Identifier identifier() const { return m_identifier; }
ServiceWorkerRegistrationKey registrationKey() const;
ServiceWorkerJobData isolatedCopy() const;
@@ -60,15 +61,15 @@
template<class Decoder> static std::optional<ServiceWorkerJobData> decode(Decoder&);
private:
- WEBCORE_EXPORT ServiceWorkerJobData(uint64_t jobIdentifier, SWServerConnectionIdentifier);
+ WEBCORE_EXPORT explicit ServiceWorkerJobData(const Identifier&);
- SWServerConnectionIdentifier m_connectionIdentifier;
+ Identifier m_identifier;
};
template<class Encoder>
void ServiceWorkerJobData::encode(Encoder& encoder) const
{
- encoder << identifier() << m_connectionIdentifier << scriptURL << clientCreationURL << topOrigin << scopeURL;
+ encoder << identifier() << scriptURL << clientCreationURL << topOrigin << scopeURL;
encoder.encodeEnum(type);
switch (type) {
case ServiceWorkerJobType::Register:
@@ -83,17 +84,13 @@
template<class Decoder>
std::optional<ServiceWorkerJobData> ServiceWorkerJobData::decode(Decoder& decoder)
{
- uint64_t jobIdentifier;
- if (!decoder.decode(jobIdentifier))
+ std::optional<ServiceWorkerJobDataIdentifier> identifier;
+ decoder >> identifier;
+ if (!identifier)
return std::nullopt;
- std::optional<SWServerConnectionIdentifier> connectionIdentifier;
- decoder >> connectionIdentifier;
- if (!connectionIdentifier)
- return std::nullopt;
+ std::optional<ServiceWorkerJobData> jobData = { ServiceWorkerJobData { WTFMove(*identifier) } };
- std::optional<ServiceWorkerJobData> jobData = { { jobIdentifier, *connectionIdentifier } };
-
if (!decoder.decode(jobData->scriptURL))
return std::nullopt;
if (!decoder.decode(jobData->clientCreationURL))
Copied: trunk/Source/WebCore/workers/service/ServiceWorkerJobDataIdentifier.h (from rev 225030, trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h) (0 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJobDataIdentifier.h (rev 0)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJobDataIdentifier.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(SERVICE_WORKER)
+
+#include "ServiceWorkerTypes.h"
+
+namespace WebCore {
+
+struct ServiceWorkerJobDataIdentifier {
+ SWServerConnectionIdentifier connectionIdentifier;
+ ServiceWorkerJobIdentifier jobIdentifier;
+
+#ifndef NDEBUG
+ String loggingString() const
+ {
+ return connectionIdentifier.loggingString() + "-" + jobIdentifier.loggingString();
+ }
+#endif
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static std::optional<ServiceWorkerJobDataIdentifier> decode(Decoder&);
+};
+
+inline bool operator==(const ServiceWorkerJobDataIdentifier& a, const ServiceWorkerJobDataIdentifier& b)
+{
+ return a.connectionIdentifier == b.connectionIdentifier && a.jobIdentifier == b.jobIdentifier;
+}
+
+template<class Encoder>
+void ServiceWorkerJobDataIdentifier::encode(Encoder& encoder) const
+{
+ encoder << connectionIdentifier << jobIdentifier;
+}
+
+template<class Decoder>
+std::optional<ServiceWorkerJobDataIdentifier> ServiceWorkerJobDataIdentifier::decode(Decoder& decoder)
+{
+ std::optional<SWServerConnectionIdentifier> connectionIdentifier;
+ decoder >> connectionIdentifier;
+ if (!connectionIdentifier)
+ return std::nullopt;
+
+ std::optional<ServiceWorkerJobIdentifier> jobIdentifier;
+ decoder >> jobIdentifier;
+ if (!jobIdentifier)
+ return std::nullopt;
+
+ return { { WTFMove(*connectionIdentifier), WTFMove(*jobIdentifier) } };
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerTypes.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/ServiceWorkerTypes.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerTypes.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -58,6 +58,9 @@
enum ServiceWorkerRegistrationIdentifierType { };
using ServiceWorkerRegistrationIdentifier = ObjectIdentifier<ServiceWorkerRegistrationIdentifierType>;
+enum ServiceWorkerJobIdentifierType { };
+using ServiceWorkerJobIdentifier = ObjectIdentifier<ServiceWorkerJobIdentifierType>;
+
enum SWServerToContextConnectionIdentifierType { };
using SWServerToContextConnectionIdentifier = ObjectIdentifier<SWServerToContextConnectionIdentifierType>;
Modified: trunk/Source/WebCore/workers/service/context/SWContextManager.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/context/SWContextManager.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/context/SWContextManager.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -51,12 +51,13 @@
void SWContextManager::registerServiceWorkerThreadForInstall(Ref<ServiceWorkerThreadProxy>&& serviceWorkerThreadProxy)
{
auto serviceWorkerIdentifier = serviceWorkerThreadProxy->identifier();
+ auto jobDataIdentifier = serviceWorkerThreadProxy->thread().contextData().jobDataIdentifier;
auto* threadProxy = serviceWorkerThreadProxy.ptr();
auto result = m_workerMap.add(serviceWorkerIdentifier, WTFMove(serviceWorkerThreadProxy));
ASSERT_UNUSED(result, result.isNewEntry);
- threadProxy->thread().start([serviceWorkerIdentifier](const String& exceptionMessage) {
- SWContextManager::singleton().connection()->serviceWorkerStartedWithMessage(serviceWorkerIdentifier, exceptionMessage);
+ threadProxy->thread().start([jobDataIdentifier, serviceWorkerIdentifier](const String& exceptionMessage) {
+ SWContextManager::singleton().connection()->serviceWorkerStartedWithMessage(jobDataIdentifier, serviceWorkerIdentifier, exceptionMessage);
});
}
Modified: trunk/Source/WebCore/workers/service/context/SWContextManager.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/context/SWContextManager.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/context/SWContextManager.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -46,8 +46,8 @@
virtual ~Connection() { }
virtual void postMessageToServiceWorkerClient(const ServiceWorkerClientIdentifier& destinationIdentifier, Ref<SerializedScriptValue>&& message, ServiceWorkerIdentifier source, const String& sourceOrigin) = 0;
- virtual void serviceWorkerStartedWithMessage(ServiceWorkerIdentifier, const String& exceptionMessage) = 0;
- virtual void didFinishInstall(ServiceWorkerIdentifier, bool wasSuccessful) = 0;
+ virtual void serviceWorkerStartedWithMessage(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, const String& exceptionMessage) = 0;
+ virtual void didFinishInstall(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, bool wasSuccessful) = 0;
virtual void didFinishActivation(ServiceWorkerIdentifier) = 0;
virtual void setServiceWorkerHasPendingEvents(ServiceWorkerIdentifier, bool) = 0;
virtual void workerTerminated(ServiceWorkerIdentifier) = 0;
Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -121,12 +121,12 @@
void ServiceWorkerThread::fireInstallEvent()
{
- ScriptExecutionContext::Task task([serviceWorkerIdentifier = this->identifier()] (ScriptExecutionContext& context) mutable {
+ ScriptExecutionContext::Task task([jobDataIdentifier = m_data.jobDataIdentifier, serviceWorkerIdentifier = this->identifier()] (ScriptExecutionContext& context) mutable {
auto& serviceWorkerGlobalScope = downcast<ServiceWorkerGlobalScope>(context);
auto installEvent = ExtendableEvent::create(eventNames().installEvent, { }, ExtendableEvent::IsTrusted::Yes);
serviceWorkerGlobalScope.dispatchEvent(installEvent);
- installEvent->whenAllExtendLifetimePromisesAreSettled([serviceWorkerIdentifier](HashSet<Ref<DOMPromise>>&& extendLifetimePromises) {
+ installEvent->whenAllExtendLifetimePromisesAreSettled([jobDataIdentifier, serviceWorkerIdentifier](HashSet<Ref<DOMPromise>>&& extendLifetimePromises) {
bool hasRejectedAnyPromise = false;
for (auto& promise : extendLifetimePromises) {
if (promise->status() == DOMPromise::Status::Rejected) {
@@ -134,9 +134,9 @@
break;
}
}
- callOnMainThread([serviceWorkerIdentifier, hasRejectedAnyPromise] () mutable {
+ callOnMainThread([jobDataIdentifier, serviceWorkerIdentifier, hasRejectedAnyPromise] () mutable {
if (auto* connection = SWContextManager::singleton().connection())
- connection->didFinishInstall(serviceWorkerIdentifier, !hasRejectedAnyPromise);
+ connection->didFinishInstall(jobDataIdentifier, serviceWorkerIdentifier, !hasRejectedAnyPromise);
});
});
});
Modified: trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -45,7 +45,7 @@
void SWClientConnection::scheduleJob(ServiceWorkerJob& job)
{
- auto addResult = m_scheduledJobs.add(job.data().identifier(), &job);
+ auto addResult = m_scheduledJobs.add(job.identifier(), &job);
ASSERT_UNUSED(addResult, addResult.isNewEntry);
scheduleJobInServer(job.data());
@@ -53,23 +53,23 @@
void SWClientConnection::finishedFetchingScript(ServiceWorkerJob& job, const String& script)
{
- ASSERT(m_scheduledJobs.get(job.data().identifier()) == &job);
+ ASSERT(m_scheduledJobs.get(job.identifier()) == &job);
- finishFetchingScriptInServer({ job.data().identifier(), job.data().connectionIdentifier(), job.data().registrationKey(), script, { } });
+ finishFetchingScriptInServer({ job.data().identifier(), job.data().registrationKey(), script, { } });
}
void SWClientConnection::failedFetchingScript(ServiceWorkerJob& job, const ResourceError& error)
{
- ASSERT(m_scheduledJobs.get(job.data().identifier()) == &job);
+ ASSERT(m_scheduledJobs.get(job.identifier()) == &job);
- finishFetchingScriptInServer({ job.data().identifier(), job.data().connectionIdentifier(), job.data().registrationKey(), { }, error });
+ finishFetchingScriptInServer({ job.data().identifier(), job.data().registrationKey(), { }, error });
}
-void SWClientConnection::jobRejectedInServer(uint64_t jobIdentifier, const ExceptionData& exceptionData)
+void SWClientConnection::jobRejectedInServer(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const ExceptionData& exceptionData)
{
- auto job = m_scheduledJobs.take(jobIdentifier);
+ auto job = m_scheduledJobs.take(jobDataIdentifier.jobIdentifier);
if (!job) {
- LOG_ERROR("Job %" PRIu64 " rejected from server, but was not found", jobIdentifier);
+ LOG_ERROR("Job %s rejected from server, but was not found", jobDataIdentifier.loggingString().utf8().data());
return;
}
@@ -76,11 +76,11 @@
job->failedWithException(exceptionData.toException());
}
-void SWClientConnection::registrationJobResolvedInServer(uint64_t jobIdentifier, ServiceWorkerRegistrationData&& registrationData, ShouldNotifyWhenResolved shouldNotifyWhenResolved)
+void SWClientConnection::registrationJobResolvedInServer(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerRegistrationData&& registrationData, ShouldNotifyWhenResolved shouldNotifyWhenResolved)
{
- auto job = m_scheduledJobs.take(jobIdentifier);
+ auto job = m_scheduledJobs.take(jobDataIdentifier.jobIdentifier);
if (!job) {
- LOG_ERROR("Job %" PRIu64 " resolved in server, but was not found", jobIdentifier);
+ LOG_ERROR("Job %s resolved in server, but was not found", jobDataIdentifier.loggingString().utf8().data());
return;
}
@@ -91,11 +91,11 @@
});
}
-void SWClientConnection::unregistrationJobResolvedInServer(uint64_t jobIdentifier, bool unregistrationResult)
+void SWClientConnection::unregistrationJobResolvedInServer(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, bool unregistrationResult)
{
- auto job = m_scheduledJobs.take(jobIdentifier);
+ auto job = m_scheduledJobs.take(jobDataIdentifier.jobIdentifier);
if (!job) {
- LOG_ERROR("Job %" PRIu64 " resolved in server, but was not found", jobIdentifier);
+ LOG_ERROR("Job %s resolved in server, but was not found", jobDataIdentifier.loggingString().utf8().data());
return;
}
@@ -102,11 +102,11 @@
job->resolvedWithUnregistrationResult(unregistrationResult);
}
-void SWClientConnection::startScriptFetchForServer(uint64_t jobIdentifier)
+void SWClientConnection::startScriptFetchForServer(const ServiceWorkerJobDataIdentifier& jobDataIdentifier)
{
- auto job = m_scheduledJobs.get(jobIdentifier);
+ auto job = m_scheduledJobs.get(jobDataIdentifier.jobIdentifier);
if (!job) {
- LOG_ERROR("Job %" PRIu64 " instructed to start fetch from server, but job was not found", jobIdentifier);
+ LOG_ERROR("Job %s instructed to start fetch from server, but job was not found", jobDataIdentifier.loggingString().utf8().data());
// FIXME: Should message back to the server here to signal failure to fetch,
// but we currently need the registration key to do so, and don't have it here.
Modified: trunk/Source/WebCore/workers/service/server/SWClientConnection.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWClientConnection.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWClientConnection.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -78,10 +78,10 @@
protected:
WEBCORE_EXPORT SWClientConnection();
- WEBCORE_EXPORT void jobRejectedInServer(uint64_t jobIdentifier, const ExceptionData&);
- WEBCORE_EXPORT void registrationJobResolvedInServer(uint64_t jobIdentifier, ServiceWorkerRegistrationData&&, ShouldNotifyWhenResolved);
- WEBCORE_EXPORT void unregistrationJobResolvedInServer(uint64_t jobIdentifier, bool unregistrationResult);
- WEBCORE_EXPORT void startScriptFetchForServer(uint64_t jobIdentifier);
+ WEBCORE_EXPORT void jobRejectedInServer(const ServiceWorkerJobDataIdentifier&, const ExceptionData&);
+ WEBCORE_EXPORT void registrationJobResolvedInServer(const ServiceWorkerJobDataIdentifier&, ServiceWorkerRegistrationData&&, ShouldNotifyWhenResolved);
+ WEBCORE_EXPORT void unregistrationJobResolvedInServer(const ServiceWorkerJobDataIdentifier&, bool unregistrationResult);
+ WEBCORE_EXPORT void startScriptFetchForServer(const ServiceWorkerJobDataIdentifier&);
WEBCORE_EXPORT void postMessageToServiceWorkerClient(uint64_t destinationScriptExecutionContextIdentifier, Ref<SerializedScriptValue>&& message, ServiceWorkerData&& source, const String& sourceOrigin);
WEBCORE_EXPORT void updateRegistrationState(ServiceWorkerRegistrationIdentifier, ServiceWorkerRegistrationState, const std::optional<ServiceWorkerData>&);
WEBCORE_EXPORT void updateWorkerState(ServiceWorkerIdentifier, ServiceWorkerState);
@@ -93,7 +93,7 @@
virtual void finishFetchingScriptInServer(const ServiceWorkerFetchResult&) = 0;
void forEachContainer(const WTF::Function<void(ServiceWorkerContainer&)>& apply);
- HashMap<uint64_t, RefPtr<ServiceWorkerJob>> m_scheduledJobs;
+ HashMap<ServiceWorkerJobIdentifier, RefPtr<ServiceWorkerJob>> m_scheduledJobs;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/workers/service/server/SWServer.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServer.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServer.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -144,7 +144,7 @@
void SWServer::Connection::scheduleJobInServer(const ServiceWorkerJobData& jobData)
{
- LOG(ServiceWorker, "Scheduling ServiceWorker job %s-%" PRIu64 " in server", jobData.connectionIdentifier().loggingString().utf8().data(), jobData.identifier());
+ LOG(ServiceWorker, "Scheduling ServiceWorker job %s in server", jobData.identifier().loggingString().utf8().data());
ASSERT(identifier() == jobData.connectionIdentifier());
m_server.scheduleJob(jobData);
@@ -208,7 +208,7 @@
void SWServer::rejectJob(const ServiceWorkerJobData& jobData, const ExceptionData& exceptionData)
{
- LOG(ServiceWorker, "Rejected ServiceWorker job %s-%" PRIu64 " in server", jobData.connectionIdentifier().loggingString().utf8().data(), jobData.identifier());
+ LOG(ServiceWorker, "Rejected ServiceWorker job %s in server", jobData.identifier().loggingString().utf8().data());
auto* connection = m_connections.get(jobData.connectionIdentifier());
if (!connection)
return;
@@ -218,7 +218,7 @@
void SWServer::resolveRegistrationJob(const ServiceWorkerJobData& jobData, const ServiceWorkerRegistrationData& registrationData, ShouldNotifyWhenResolved shouldNotifyWhenResolved)
{
- LOG(ServiceWorker, "Resolved ServiceWorker job %s-%" PRIu64 " in server with registration %s", jobData.connectionIdentifier().loggingString().utf8().data(), jobData.identifier(), registrationData.identifier.loggingString().utf8().data());
+ LOG(ServiceWorker, "Resolved ServiceWorker job %s in server with registration %s", jobData.identifier().loggingString().utf8().data(), registrationData.identifier.loggingString().utf8().data());
auto* connection = m_connections.get(jobData.connectionIdentifier());
if (!connection)
return;
@@ -237,7 +237,7 @@
void SWServer::startScriptFetch(const ServiceWorkerJobData& jobData)
{
- LOG(ServiceWorker, "Server issuing startScriptFetch for current job %s-%" PRIu64 " in client", jobData.connectionIdentifier().loggingString().utf8().data(), jobData.identifier());
+ LOG(ServiceWorker, "Server issuing startScriptFetch for current job %s in client", jobData.identifier().loggingString().utf8().data());
auto* connection = m_connections.get(jobData.connectionIdentifier());
if (!connection)
return;
@@ -247,9 +247,9 @@
void SWServer::scriptFetchFinished(Connection& connection, const ServiceWorkerFetchResult& result)
{
- LOG(ServiceWorker, "Server handling scriptFetchFinished for current job %s-%" PRIu64 " in client", result.connectionIdentifier.loggingString().utf8().data(), result.jobIdentifier);
+ LOG(ServiceWorker, "Server handling scriptFetchFinished for current job %s in client", result.jobDataIdentifier.loggingString().utf8().data());
- ASSERT(m_connections.contains(result.connectionIdentifier));
+ ASSERT(m_connections.contains(result.jobDataIdentifier.connectionIdentifier));
auto jobQueue = m_jobQueues.get(result.registrationKey);
if (!jobQueue)
@@ -258,22 +258,22 @@
jobQueue->scriptFetchFinished(connection, result);
}
-void SWServer::scriptContextFailedToStart(SWServerWorker& worker, const String& message)
+void SWServer::scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerWorker& worker, const String& message)
{
if (auto* jobQueue = m_jobQueues.get(worker.registrationKey()))
- jobQueue->scriptContextFailedToStart(worker.identifier(), message);
+ jobQueue->scriptContextFailedToStart(jobDataIdentifier, worker.identifier(), message);
}
-void SWServer::scriptContextStarted(SWServerWorker& worker)
+void SWServer::scriptContextStarted(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerWorker& worker)
{
if (auto* jobQueue = m_jobQueues.get(worker.registrationKey()))
- jobQueue->scriptContextStarted(worker.identifier());
+ jobQueue->scriptContextStarted(jobDataIdentifier, worker.identifier());
}
-void SWServer::didFinishInstall(SWServerWorker& worker, bool wasSuccessful)
+void SWServer::didFinishInstall(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerWorker& worker, bool wasSuccessful)
{
if (auto* jobQueue = m_jobQueues.get(worker.registrationKey()))
- jobQueue->didFinishInstall(worker.identifier(), wasSuccessful);
+ jobQueue->didFinishInstall(jobDataIdentifier, worker.identifier(), wasSuccessful);
}
void SWServer::didFinishActivation(SWServerWorker& worker)
@@ -350,11 +350,11 @@
registration->removeClientUsingRegistration({ connection.identifier(), scriptExecutionContextIdentifier });
}
-void SWServer::updateWorker(Connection&, const ServiceWorkerRegistrationKey& registrationKey, const URL& url, const String& script, WorkerType type)
+void SWServer::updateWorker(Connection&, const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const ServiceWorkerRegistrationKey& registrationKey, const URL& url, const String& script, WorkerType type)
{
auto serviceWorkerIdentifier = generateServiceWorkerIdentifier();
- ServiceWorkerContextData data = { registrationKey, serviceWorkerIdentifier, script, url, type };
+ ServiceWorkerContextData data = { jobDataIdentifier, registrationKey, serviceWorkerIdentifier, script, url, type };
// Right now we only ever keep up to one connection to one SW context process.
// And it should always exist if we're calling updateWorker
Modified: trunk/Source/WebCore/workers/service/server/SWServer.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServer.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServer.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -88,10 +88,10 @@
private:
// Messages to the client WebProcess
- virtual void rejectJobInClient(uint64_t jobIdentifier, const ExceptionData&) = 0;
- virtual void resolveRegistrationJobInClient(uint64_t jobIdentifier, const ServiceWorkerRegistrationData&, ShouldNotifyWhenResolved) = 0;
- virtual void resolveUnregistrationJobInClient(uint64_t jobIdentifier, const ServiceWorkerRegistrationKey&, bool registrationResult) = 0;
- virtual void startScriptFetchInClient(uint64_t jobIdentifier) = 0;
+ virtual void rejectJobInClient(const ServiceWorkerJobDataIdentifier&, const ExceptionData&) = 0;
+ virtual void resolveRegistrationJobInClient(const ServiceWorkerJobDataIdentifier&, const ServiceWorkerRegistrationData&, ShouldNotifyWhenResolved) = 0;
+ virtual void resolveUnregistrationJobInClient(const ServiceWorkerJobDataIdentifier&, const ServiceWorkerRegistrationKey&, bool registrationResult) = 0;
+ virtual void startScriptFetchInClient(const ServiceWorkerJobDataIdentifier&) = 0;
SWServer& m_server;
Identifier m_identifier;
@@ -118,7 +118,7 @@
void postTask(CrossThreadTask&&);
void postTaskReply(CrossThreadTask&&);
- void updateWorker(Connection&, const ServiceWorkerRegistrationKey&, const URL&, const String& script, WorkerType);
+ void updateWorker(Connection&, const ServiceWorkerJobDataIdentifier&, const ServiceWorkerRegistrationKey&, const URL&, const String& script, WorkerType);
void terminateWorker(SWServerWorker&);
void fireInstallEvent(SWServerWorker&);
void fireActivateEvent(SWServerWorker&);
@@ -127,9 +127,9 @@
Connection* getConnection(SWServerConnectionIdentifier identifier) { return m_connections.get(identifier); }
SWOriginStore& originStore() { return m_originStore; }
- void scriptContextFailedToStart(SWServerWorker&, const String& message);
- void scriptContextStarted(SWServerWorker&);
- void didFinishInstall(SWServerWorker&, bool wasSuccessful);
+ void scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier&, SWServerWorker&, const String& message);
+ void scriptContextStarted(const ServiceWorkerJobDataIdentifier&, SWServerWorker&);
+ void didFinishInstall(const ServiceWorkerJobDataIdentifier&, SWServerWorker&, bool wasSuccessful);
void didFinishActivation(SWServerWorker&);
void workerContextTerminated(SWServerWorker&);
Modified: trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -50,14 +50,14 @@
{
}
-bool SWServerJobQueue::isCurrentlyProcessingJob(uint64_t jobIdentifier) const
+bool SWServerJobQueue::isCurrentlyProcessingJob(const ServiceWorkerJobDataIdentifier& jobDataIdentifier) const
{
- return !m_jobQueue.isEmpty() && firstJob().identifier() == jobIdentifier;
+ return !m_jobQueue.isEmpty() && firstJob().identifier() == jobDataIdentifier;
}
void SWServerJobQueue::scriptFetchFinished(SWServer::Connection& connection, const ServiceWorkerFetchResult& result)
{
- if (!isCurrentlyProcessingJob(result.jobIdentifier))
+ if (!isCurrentlyProcessingJob(result.jobDataIdentifier))
return;
auto& job = firstJob();
@@ -87,12 +87,15 @@
// - Invoke Finish Job with job and abort these steps.
// FIXME: Support the proper worker type (classic vs module)
- m_server.updateWorker(connection, m_registrationKey, job.scriptURL, result.script, WorkerType::Classic);
+ m_server.updateWorker(connection, job.identifier(), m_registrationKey, job.scriptURL, result.script, WorkerType::Classic);
}
// https://w3c.github.io/ServiceWorker/#update-algorithm
-void SWServerJobQueue::scriptContextFailedToStart(ServiceWorkerIdentifier, const String& message)
+void SWServerJobQueue::scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier, const String& message)
{
+ if (!isCurrentlyProcessingJob(jobDataIdentifier))
+ return;
+
// If an uncaught runtime script error occurs during the above step, then:
auto* registration = m_server.getRegistration(m_registrationKey);
ASSERT(registration);
@@ -108,8 +111,11 @@
finishCurrentJob();
}
-void SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier identifier)
+void SWServerJobQueue::scriptContextStarted(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier identifier)
{
+ if (!isCurrentlyProcessingJob(jobDataIdentifier))
+ return;
+
auto* registration = m_server.getRegistration(m_registrationKey);
ASSERT(registration);
@@ -148,8 +154,11 @@
}
// https://w3c.github.io/ServiceWorker/#install
-void SWServerJobQueue::didFinishInstall(ServiceWorkerIdentifier identifier, bool wasSuccessful)
+void SWServerJobQueue::didFinishInstall(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier identifier, bool wasSuccessful)
{
+ if (!isCurrentlyProcessingJob(jobDataIdentifier))
+ return;
+
auto* registration = m_server.getRegistration(m_registrationKey);
ASSERT(registration);
ASSERT(registration->installingWorker());
Modified: trunk/Source/WebCore/workers/service/server/SWServerJobQueue.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerJobQueue.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerJobQueue.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -48,9 +48,9 @@
void runNextJob();
void scriptFetchFinished(SWServer::Connection&, const ServiceWorkerFetchResult&);
- void scriptContextFailedToStart(ServiceWorkerIdentifier, const String& message);
- void scriptContextStarted(ServiceWorkerIdentifier);
- void didFinishInstall(ServiceWorkerIdentifier, bool wasSuccessful);
+ void scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, const String& message);
+ void scriptContextStarted(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier);
+ void didFinishInstall(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, bool wasSuccessful);
static void didFinishActivation(SWServerRegistration&, ServiceWorkerIdentifier);
void didResolveRegistrationPromise();
@@ -71,7 +71,7 @@
static void tryActivate(SWServer&, SWServerRegistration&);
static void activate(SWServer&, SWServerRegistration&);
- bool isCurrentlyProcessingJob(uint64_t jobIdentifier) const;
+ bool isCurrentlyProcessingJob(const ServiceWorkerJobDataIdentifier&) const;
Deque<ServiceWorkerJobData> m_jobQueue;
Modified: trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -72,22 +72,22 @@
return allConnections().begin()->value;
}
-void SWServerToContextConnection::scriptContextFailedToStart(ServiceWorkerIdentifier serviceWorkerIdentifier, const String& message)
+void SWServerToContextConnection::scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, const String& message)
{
if (auto* worker = SWServerWorker::existingWorkerForIdentifier(serviceWorkerIdentifier))
- worker->scriptContextFailedToStart(message);
+ worker->scriptContextFailedToStart(jobDataIdentifier, message);
}
-void SWServerToContextConnection::scriptContextStarted(ServiceWorkerIdentifier serviceWorkerIdentifier)
+void SWServerToContextConnection::scriptContextStarted(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier)
{
if (auto* worker = SWServerWorker::existingWorkerForIdentifier(serviceWorkerIdentifier))
- worker->scriptContextStarted();
+ worker->scriptContextStarted(jobDataIdentifier);
}
-void SWServerToContextConnection::didFinishInstall(ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful)
+void SWServerToContextConnection::didFinishInstall(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful)
{
if (auto* worker = SWServerWorker::existingWorkerForIdentifier(serviceWorkerIdentifier))
- worker->didFinishInstall(wasSuccessful);
+ worker->didFinishInstall(jobDataIdentifier, wasSuccessful);
}
void SWServerToContextConnection::didFinishActivation(ServiceWorkerIdentifier serviceWorkerIdentifier)
Modified: trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -35,6 +35,7 @@
class SWServer;
struct ServiceWorkerContextData;
+struct ServiceWorkerJobDataIdentifier;
class SWServerToContextConnection : public ThreadSafeRefCounted<SWServerToContextConnection> {
public:
@@ -49,9 +50,9 @@
virtual void terminateWorker(ServiceWorkerIdentifier) = 0;
// Messages back from the SW host process
- WEBCORE_EXPORT void scriptContextFailedToStart(ServiceWorkerIdentifier, const String& message);
- WEBCORE_EXPORT void scriptContextStarted(ServiceWorkerIdentifier);
- WEBCORE_EXPORT void didFinishInstall(ServiceWorkerIdentifier, bool wasSuccessful);
+ WEBCORE_EXPORT void scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, const String& message);
+ WEBCORE_EXPORT void scriptContextStarted(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier);
+ WEBCORE_EXPORT void didFinishInstall(const ServiceWorkerJobDataIdentifier&, ServiceWorkerIdentifier, bool wasSuccessful);
WEBCORE_EXPORT void didFinishActivation(ServiceWorkerIdentifier);
WEBCORE_EXPORT void setServiceWorkerHasPendingEvents(ServiceWorkerIdentifier, bool hasPendingEvents);
WEBCORE_EXPORT void workerTerminated(ServiceWorkerIdentifier);
Modified: trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -65,19 +65,19 @@
m_server.terminateWorker(*this);
}
-void SWServerWorker::scriptContextFailedToStart(const String& message)
+void SWServerWorker::scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const String& message)
{
- m_server.scriptContextFailedToStart(*this, message);
+ m_server.scriptContextFailedToStart(jobDataIdentifier, *this, message);
}
-void SWServerWorker::scriptContextStarted()
+void SWServerWorker::scriptContextStarted(const ServiceWorkerJobDataIdentifier& jobDataIdentifier)
{
- m_server.scriptContextStarted(*this);
+ m_server.scriptContextStarted(jobDataIdentifier, *this);
}
-void SWServerWorker::didFinishInstall(bool wasSuccessful)
+void SWServerWorker::didFinishInstall(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, bool wasSuccessful)
{
- m_server.didFinishInstall(*this, wasSuccessful);
+ m_server.didFinishInstall(jobDataIdentifier, *this, wasSuccessful);
}
void SWServerWorker::didFinishActivation()
Modified: trunk/Source/WebCore/workers/service/server/SWServerWorker.h (225030 => 225031)
--- trunk/Source/WebCore/workers/service/server/SWServerWorker.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebCore/workers/service/server/SWServerWorker.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -38,6 +38,7 @@
class SWServer;
enum class WorkerType;
+struct ServiceWorkerJobDataIdentifier;
class SWServerWorker : public ThreadSafeRefCounted<SWServerWorker> {
public:
@@ -66,9 +67,9 @@
bool hasPendingEvents() const { return m_hasPendingEvents; }
void setHasPendingEvents(bool value) { m_hasPendingEvents = value; }
- void scriptContextFailedToStart(const String& message);
- void scriptContextStarted();
- void didFinishInstall(bool wasSuccessful);
+ void scriptContextFailedToStart(const ServiceWorkerJobDataIdentifier&, const String& message);
+ void scriptContextStarted(const ServiceWorkerJobDataIdentifier&);
+ void didFinishInstall(const ServiceWorkerJobDataIdentifier&, bool wasSuccessful);
void didFinishActivation();
void contextTerminated();
Modified: trunk/Source/WebKit/ChangeLog (225030 => 225031)
--- trunk/Source/WebKit/ChangeLog 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/ChangeLog 2017-11-19 07:19:00 UTC (rev 225031)
@@ -1,3 +1,23 @@
+2017-11-18 Chris Dumez <[email protected]>
+
+ ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
+ https://bugs.webkit.org/show_bug.cgi?id=179846
+
+ Reviewed by Darin Adler.
+
+ * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
+ (WebKit::WebSWServerConnection::rejectJobInClient):
+ (WebKit::WebSWServerConnection::resolveRegistrationJobInClient):
+ (WebKit::WebSWServerConnection::resolveUnregistrationJobInClient):
+ (WebKit::WebSWServerConnection::startScriptFetchInClient):
+ * StorageProcess/ServiceWorker/WebSWServerConnection.h:
+ * StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
+ * WebProcess/Storage/WebSWClientConnection.messages.in:
+ * WebProcess/Storage/WebSWContextManagerConnection.cpp:
+ (WebKit::WebSWContextManagerConnection::serviceWorkerStartedWithMessage):
+ (WebKit::WebSWContextManagerConnection::didFinishInstall):
+ * WebProcess/Storage/WebSWContextManagerConnection.h:
+
2017-11-18 Tim Horton <[email protected]>
Rename some Network Capture debugging defines
Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp (225030 => 225031)
--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -72,24 +72,24 @@
notImplemented();
}
-void WebSWServerConnection::rejectJobInClient(uint64_t jobIdentifier, const ExceptionData& exceptionData)
+void WebSWServerConnection::rejectJobInClient(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const ExceptionData& exceptionData)
{
- send(Messages::WebSWClientConnection::JobRejectedInServer(jobIdentifier, exceptionData));
+ send(Messages::WebSWClientConnection::JobRejectedInServer(jobDataIdentifier, exceptionData));
}
-void WebSWServerConnection::resolveRegistrationJobInClient(uint64_t jobIdentifier, const ServiceWorkerRegistrationData& registrationData, ShouldNotifyWhenResolved shouldNotifyWhenResolved)
+void WebSWServerConnection::resolveRegistrationJobInClient(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const ServiceWorkerRegistrationData& registrationData, ShouldNotifyWhenResolved shouldNotifyWhenResolved)
{
- send(Messages::WebSWClientConnection::RegistrationJobResolvedInServer(jobIdentifier, registrationData, shouldNotifyWhenResolved));
+ send(Messages::WebSWClientConnection::RegistrationJobResolvedInServer(jobDataIdentifier, registrationData, shouldNotifyWhenResolved));
}
-void WebSWServerConnection::resolveUnregistrationJobInClient(uint64_t jobIdentifier, const ServiceWorkerRegistrationKey& registrationKey, bool unregistrationResult)
+void WebSWServerConnection::resolveUnregistrationJobInClient(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, const ServiceWorkerRegistrationKey& registrationKey, bool unregistrationResult)
{
- send(Messages::WebSWClientConnection::UnregistrationJobResolvedInServer(jobIdentifier, unregistrationResult));
+ send(Messages::WebSWClientConnection::UnregistrationJobResolvedInServer(jobDataIdentifier, unregistrationResult));
}
-void WebSWServerConnection::startScriptFetchInClient(uint64_t jobIdentifier)
+void WebSWServerConnection::startScriptFetchInClient(const ServiceWorkerJobDataIdentifier& jobDataIdentifier)
{
- send(Messages::WebSWClientConnection::StartScriptFetchForServer(jobIdentifier));
+ send(Messages::WebSWClientConnection::StartScriptFetchForServer(jobDataIdentifier));
}
void WebSWServerConnection::updateRegistrationStateInClient(ServiceWorkerRegistrationIdentifier identifier, ServiceWorkerRegistrationState state, const std::optional<ServiceWorkerData>& serviceWorkerData)
Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h (225030 => 225031)
--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -66,10 +66,10 @@
private:
// Implement SWServer::Connection (Messages to the client WebProcess)
- void rejectJobInClient(uint64_t jobIdentifier, const WebCore::ExceptionData&) final;
- void resolveRegistrationJobInClient(uint64_t jobIdentifier, const WebCore::ServiceWorkerRegistrationData&, WebCore::ShouldNotifyWhenResolved) final;
- void resolveUnregistrationJobInClient(uint64_t jobIdentifier, const WebCore::ServiceWorkerRegistrationKey&, bool unregistrationResult) final;
- void startScriptFetchInClient(uint64_t jobIdentifier) final;
+ void rejectJobInClient(const WebCore::ServiceWorkerJobDataIdentifier&, const WebCore::ExceptionData&) final;
+ void resolveRegistrationJobInClient(const WebCore::ServiceWorkerJobDataIdentifier&, const WebCore::ServiceWorkerRegistrationData&, WebCore::ShouldNotifyWhenResolved) final;
+ void resolveUnregistrationJobInClient(const WebCore::ServiceWorkerJobDataIdentifier&, const WebCore::ServiceWorkerRegistrationKey&, bool unregistrationResult) final;
+ void startScriptFetchInClient(const WebCore::ServiceWorkerJobDataIdentifier&) final;
void updateRegistrationStateInClient(WebCore::ServiceWorkerRegistrationIdentifier, WebCore::ServiceWorkerRegistrationState, const std::optional<WebCore::ServiceWorkerData>&) final;
void updateWorkerStateInClient(WebCore::ServiceWorkerIdentifier, WebCore::ServiceWorkerState) final;
void fireUpdateFoundEvent(WebCore::ServiceWorkerRegistrationIdentifier) final;
Modified: trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in (225030 => 225031)
--- trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerToContextConnection.messages.in 2017-11-19 07:19:00 UTC (rev 225031)
@@ -25,9 +25,9 @@
messages -> WebSWServerToContextConnection {
# When possible, these messages can be implemented directly by WebCore::SWServerToContextConnection
- ScriptContextFailedToStart(WebCore::ServiceWorkerIdentifier identifier, String message);
- ScriptContextStarted(WebCore::ServiceWorkerIdentifier identifier);
- DidFinishInstall(WebCore::ServiceWorkerIdentifier identifier, bool wasSuccessful);
+ ScriptContextFailedToStart(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, String message);
+ ScriptContextStarted(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier);
+ DidFinishInstall(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful);
DidFinishActivation(WebCore::ServiceWorkerIdentifier identifier);
SetServiceWorkerHasPendingEvents(WebCore::ServiceWorkerIdentifier identifier, bool hasPendingEvents);
WorkerTerminated(WebCore::ServiceWorkerIdentifier identifier);
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in (225030 => 225031)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.messages.in 2017-11-19 07:19:00 UTC (rev 225031)
@@ -24,10 +24,10 @@
messages -> WebSWClientConnection {
# When possible, these messages can be implemented directly by WebCore::SWServer::Connection
- JobRejectedInServer(uint64_t identifier, struct WebCore::ExceptionData exception)
- RegistrationJobResolvedInServer(uint64_t identifier, struct WebCore::ServiceWorkerRegistrationData registration, enum WebCore::ShouldNotifyWhenResolved shouldNotifyWhenResolved)
- UnregistrationJobResolvedInServer(uint64_t identifier, bool unregistrationResult)
- StartScriptFetchForServer(uint64_t jobIdentifier)
+ JobRejectedInServer(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, struct WebCore::ExceptionData exception)
+ RegistrationJobResolvedInServer(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, struct WebCore::ServiceWorkerRegistrationData registration, enum WebCore::ShouldNotifyWhenResolved shouldNotifyWhenResolved)
+ UnregistrationJobResolvedInServer(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier, bool unregistrationResult)
+ StartScriptFetchForServer(struct WebCore::ServiceWorkerJobDataIdentifier jobDataIdentifier)
UpdateRegistrationState(WebCore::ServiceWorkerRegistrationIdentifier identifier, enum WebCore::ServiceWorkerRegistrationState state, std::optional<WebCore::ServiceWorkerData> serviceWorkerIdentifier)
UpdateWorkerState(WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, enum WebCore::ServiceWorkerState state)
FireUpdateFoundEvent(WebCore::ServiceWorkerRegistrationIdentifier identifier)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (225030 => 225031)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp 2017-11-19 07:19:00 UTC (rev 225031)
@@ -124,12 +124,12 @@
LOG(ServiceWorker, "Context process PID: %i created worker thread\n", getpid());
}
-void WebSWContextManagerConnection::serviceWorkerStartedWithMessage(ServiceWorkerIdentifier serviceWorkerIdentifier, const String& exceptionMessage)
+void WebSWContextManagerConnection::serviceWorkerStartedWithMessage(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, const String& exceptionMessage)
{
if (exceptionMessage.isEmpty())
- m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::ScriptContextStarted(serviceWorkerIdentifier), 0);
+ m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::ScriptContextStarted(jobDataIdentifier, serviceWorkerIdentifier), 0);
else
- m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::ScriptContextFailedToStart(serviceWorkerIdentifier, exceptionMessage), 0);
+ m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::ScriptContextFailedToStart(jobDataIdentifier, serviceWorkerIdentifier, exceptionMessage), 0);
}
void WebSWContextManagerConnection::startFetch(SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier, std::optional<ServiceWorkerIdentifier> serviceWorkerIdentifier, ResourceRequest&& request, FetchOptions&& options, IPC::FormDataReference&& formData)
@@ -171,9 +171,9 @@
m_connectionToStorageProcess->send(Messages::StorageProcess::PostMessageToServiceWorkerClient(destinationIdentifier, IPC::DataReference { message->data() }, sourceIdentifier, sourceOrigin), 0);
}
-void WebSWContextManagerConnection::didFinishInstall(ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful)
+void WebSWContextManagerConnection::didFinishInstall(const ServiceWorkerJobDataIdentifier& jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful)
{
- m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::DidFinishInstall(serviceWorkerIdentifier, wasSuccessful), 0);
+ m_connectionToStorageProcess->send(Messages::WebSWServerToContextConnection::DidFinishInstall(jobDataIdentifier, serviceWorkerIdentifier, wasSuccessful), 0);
}
void WebSWContextManagerConnection::didFinishActivation(ServiceWorkerIdentifier serviceWorkerIdentifier)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h (225030 => 225031)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h 2017-11-19 06:59:59 UTC (rev 225030)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h 2017-11-19 07:19:00 UTC (rev 225031)
@@ -57,13 +57,13 @@
// WebCore::SWContextManager::Connection.
void postMessageToServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier& destinationIdentifier, Ref<WebCore::SerializedScriptValue>&& message, WebCore::ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin) final;
- void didFinishInstall(WebCore::ServiceWorkerIdentifier, bool wasSuccessful) final;
+ void didFinishInstall(const WebCore::ServiceWorkerJobDataIdentifier&, WebCore::ServiceWorkerIdentifier, bool wasSuccessful) final;
void didFinishActivation(WebCore::ServiceWorkerIdentifier) final;
void setServiceWorkerHasPendingEvents(WebCore::ServiceWorkerIdentifier, bool) final;
void workerTerminated(WebCore::ServiceWorkerIdentifier) final;
// IPC messages.
- void serviceWorkerStartedWithMessage(WebCore::ServiceWorkerIdentifier, const String& exceptionMessage) final;
+ void serviceWorkerStartedWithMessage(const WebCore::ServiceWorkerJobDataIdentifier&, WebCore::ServiceWorkerIdentifier, const String& exceptionMessage) final;
void installServiceWorker(const WebCore::ServiceWorkerContextData&);
void startFetch(WebCore::SWServerConnectionIdentifier, uint64_t fetchIdentifier, std::optional<WebCore::ServiceWorkerIdentifier>, WebCore::ResourceRequest&&, WebCore::FetchOptions&&, IPC::FormDataReference&&);
void postMessageToServiceWorkerGlobalScope(WebCore::ServiceWorkerIdentifier destinationIdentifier, const IPC::DataReference& message, WebCore::ServiceWorkerClientIdentifier sourceIdentifier, WebCore::ServiceWorkerClientData&& sourceData);