Title: [223652] trunk
Revision
223652
Author
cdu...@apple.com
Date
2017-10-18 20:29:51 -0700 (Wed, 18 Oct 2017)

Log Message

Implement ServiceWorkerRegistration.scope / updateViaCache
https://bugs.webkit.org/show_bug.cgi?id=178497

Reviewed by Youenn Fablet.

Source/WebCore:

Implement ServiceWorkerRegistration.scope / updateViaCache.

No new tests, updated existing test.

* WebCore.xcodeproj/project.pbxproj:
* workers/service/ServiceWorkerContainer.cpp:
(WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
* workers/service/ServiceWorkerContainer.h:
* workers/service/ServiceWorkerJob.cpp:
(WebCore::ServiceWorkerJob::resolvedWithRegistration):
* workers/service/ServiceWorkerJob.h:
* workers/service/ServiceWorkerJobClient.h:
* workers/service/ServiceWorkerRegistration.cpp:
(WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
(WebCore::ServiceWorkerRegistration::scope const):
(WebCore::ServiceWorkerRegistration::updateViaCache const):
(WebCore::ServiceWorkerRegistration::update):
(WebCore::ServiceWorkerRegistration::unregister):
(WebCore::ServiceWorkerRegistration::scriptExecutionContext const):
(WebCore::ServiceWorkerRegistration::activeDOMObjectName const):
(WebCore::ServiceWorkerRegistration::canSuspendForDocumentSuspension const):
* workers/service/ServiceWorkerRegistration.h:
* workers/service/ServiceWorkerRegistration.idl:
* workers/service/ServiceWorkerRegistrationData.cpp:
(WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
* workers/service/ServiceWorkerRegistrationData.h:
(WebCore::ServiceWorkerRegistrationData::encode const):
(WebCore::ServiceWorkerRegistrationData::decode):
* workers/service/server/SWClientConnection.cpp:
(WebCore::SWClientConnection::jobResolvedInServer):
* workers/service/server/SWClientConnection.h:
* workers/service/server/SWServerRegistration.cpp:
(WebCore::SWServerRegistration::scriptContextStarted):
(WebCore::SWServerRegistration::data const):

Source/WebKit:

* Shared/WebCoreArgumentCoders.h:
* StorageProcess/ServiceWorker/WebSWServerConnection.cpp:

LayoutTests:

Extend layout test coverage.

* http/tests/workers/service/basic-register-expected.txt:
* http/tests/workers/service/resources/basic-register.js:
(then):

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (223651 => 223652)


--- trunk/LayoutTests/ChangeLog	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/LayoutTests/ChangeLog	2017-10-19 03:29:51 UTC (rev 223652)
@@ -1,3 +1,16 @@
+2017-10-18  Chris Dumez  <cdu...@apple.com>
+
+        Implement ServiceWorkerRegistration.scope / updateViaCache
+        https://bugs.webkit.org/show_bug.cgi?id=178497
+
+        Reviewed by Youenn Fablet.
+
+        Extend layout test coverage.
+
+        * http/tests/workers/service/basic-register-expected.txt:
+        * http/tests/workers/service/resources/basic-register.js:
+        (then):
+
 2017-10-18  Youenn Fablet  <you...@apple.com>
 
         Add preliminary support for ServiceWorker Handle Fetch

Modified: trunk/LayoutTests/http/tests/workers/service/basic-register-expected.txt (223651 => 223652)


--- trunk/LayoutTests/http/tests/workers/service/basic-register-expected.txt	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/LayoutTests/http/tests/workers/service/basic-register-expected.txt	2017-10-19 03:29:51 UTC (rev 223652)
@@ -1,6 +1,8 @@
 PASS: No service worker is initially registered for this origin
 PASS: No service worker is initially registered for this origin in private session
 Registered!
+PASS: registration object's scope is valid
+PASS: registration object's updateViaCache is valid
 PASS: A service worker is now registered for this origin
 PASS: No service worker is registered for this origin in private session
 Registered!

Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-register.js (223651 => 223652)


--- trunk/LayoutTests/http/tests/workers/service/resources/basic-register.js	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-register.js	2017-10-19 03:29:51 UTC (rev 223652)
@@ -30,10 +30,20 @@
 
 testRunner.setPrivateBrowsingEnabled(false);
 
-navigator.serviceWorker.register("resources/empty-worker.js", { })
+navigator.serviceWorker.register("resources/empty-worker.js", { scope: "/test", updateViaCache: "none" })
 .then(function(r) {
 	log("Registered!");
 
+        if (r.scope == "http://127.0.0.1:8000/test")
+           log("PASS: registration object's scope is valid");
+        else
+           log("FAIL: registration object's scope is invalid, got: " + r.scope);
+
+        if (r.updateViaCache == "none")
+           log("PASS: registration object's updateViaCache is valid");
+        else
+           log("FAIL: registration object's updateViaCache is invalid, got: " + r.updateViaCache);
+
         if (internals.hasServiceWorkerRegisteredForOrigin(self.origin))
             log("PASS: A service worker is now registered for this origin");
         else

Modified: trunk/Source/WebCore/ChangeLog (223651 => 223652)


--- trunk/Source/WebCore/ChangeLog	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/ChangeLog	2017-10-19 03:29:51 UTC (rev 223652)
@@ -1,3 +1,45 @@
+2017-10-18  Chris Dumez  <cdu...@apple.com>
+
+        Implement ServiceWorkerRegistration.scope / updateViaCache
+        https://bugs.webkit.org/show_bug.cgi?id=178497
+
+        Reviewed by Youenn Fablet.
+
+        Implement ServiceWorkerRegistration.scope / updateViaCache.
+
+        No new tests, updated existing test.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * workers/service/ServiceWorkerContainer.cpp:
+        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
+        * workers/service/ServiceWorkerContainer.h:
+        * workers/service/ServiceWorkerJob.cpp:
+        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
+        * workers/service/ServiceWorkerJob.h:
+        * workers/service/ServiceWorkerJobClient.h:
+        * workers/service/ServiceWorkerRegistration.cpp:
+        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
+        (WebCore::ServiceWorkerRegistration::scope const):
+        (WebCore::ServiceWorkerRegistration::updateViaCache const):
+        (WebCore::ServiceWorkerRegistration::update):
+        (WebCore::ServiceWorkerRegistration::unregister):
+        (WebCore::ServiceWorkerRegistration::scriptExecutionContext const):
+        (WebCore::ServiceWorkerRegistration::activeDOMObjectName const):
+        (WebCore::ServiceWorkerRegistration::canSuspendForDocumentSuspension const):
+        * workers/service/ServiceWorkerRegistration.h:
+        * workers/service/ServiceWorkerRegistration.idl:
+        * workers/service/ServiceWorkerRegistrationData.cpp:
+        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
+        * workers/service/ServiceWorkerRegistrationData.h:
+        (WebCore::ServiceWorkerRegistrationData::encode const):
+        (WebCore::ServiceWorkerRegistrationData::decode):
+        * workers/service/server/SWClientConnection.cpp:
+        (WebCore::SWClientConnection::jobResolvedInServer):
+        * workers/service/server/SWClientConnection.h:
+        * workers/service/server/SWServerRegistration.cpp:
+        (WebCore::SWServerRegistration::scriptContextStarted):
+        (WebCore::SWServerRegistration::data const):
+
 2017-10-18  Youenn Fablet  <you...@apple.com>
 
         Add preliminary support for ServiceWorker Handle Fetch

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (223651 => 223652)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-10-19 03:29:51 UTC (rev 223652)
@@ -2491,7 +2491,7 @@
 		51F175671F3EBC8300C74950 /* ServiceWorkerRegistration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F1754D1F3EBC0C00C74950 /* ServiceWorkerRegistration.cpp */; };
 		51F175681F3EBC8300C74950 /* ServiceWorkerRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F1754C1F3EBC0C00C74950 /* ServiceWorkerRegistration.h */; };
 		51F175691F3EBC8300C74950 /* ServiceWorkerRegistrationOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F1754A1F3EBC0C00C74950 /* ServiceWorkerRegistrationOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		51F1756C1F3EBC8300C74950 /* ServiceWorkerUpdateViaCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F175471F3EBC0C00C74950 /* ServiceWorkerUpdateViaCache.h */; };
+		51F1756C1F3EBC8300C74950 /* ServiceWorkerUpdateViaCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F175471F3EBC0C00C74950 /* ServiceWorkerUpdateViaCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		51F645621F45398F00B54DED /* ExceptionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645601F45398B00B54DED /* ExceptionData.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		51F645691F4539B900B54DED /* ServiceWorkerJobData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645661F45399F00B54DED /* ServiceWorkerJobData.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		51F6456A1F4539C000B54DED /* ServiceWorkerJobType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F645651F45399F00B54DED /* ServiceWorkerJobType.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -32708,9 +32708,8 @@
 				0F4966AA1DB40C4300A274BB /* JSDOMPoint.cpp in Sources */,
 				0F4966AC1DB40C4300A274BB /* JSDOMPointInit.cpp in Sources */,
 				0F4966AE1DB40C4300A274BB /* JSDOMPointReadOnly.cpp in Sources */,
-                                41AF379D1F8DB1B500111C31 /* JSDOMPromise.cpp in Sources */,
-				E172AF8F1811BC3700FBADB9 /* JSDOMPromiseDeferred.cpp in Sources */,
-                                0FF3B9281EE3B6DE00B84144 /* JSDOMQuad.cpp in Sources */,
+				41AF379D1F8DB1B500111C31 /* JSDOMPromise.cpp in Sources */,
+				0FF3B9281EE3B6DE00B84144 /* JSDOMQuad.cpp in Sources */,
 				0FF3B92A1EE3B6DE00B84144 /* JSDOMQuadInit.cpp in Sources */,
 				0F4710BB1DB56BE8002DCEC3 /* JSDOMRect.cpp in Sources */,
 				0F4710BD1DB56BE8002DCEC3 /* JSDOMRectInit.cpp in Sources */,

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -167,7 +167,7 @@
     jobDidFinish(job);
 }
 
-void ServiceWorkerContainer::jobResolvedWithRegistration(ServiceWorkerJob& job, const ServiceWorkerRegistrationData& data)
+void ServiceWorkerContainer::jobResolvedWithRegistration(ServiceWorkerJob& job, ServiceWorkerRegistrationData&& data)
 {
     ScopeGuard guard([this, &job] {
         jobDidFinish(job);
@@ -182,7 +182,7 @@
     // FIXME: Implement proper selection of service workers.
     context->setSelectedServiceWorkerIdentifier(data.identifier);
 
-    auto registration = ServiceWorkerRegistration::create(*context, data);
+    auto registration = ServiceWorkerRegistration::create(*context, WTFMove(data));
     job.promise().resolve<IDLInterface<ServiceWorkerRegistration>>(registration.get());
 }
 

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -72,7 +72,7 @@
     void scheduleJob(Ref<ServiceWorkerJob>&&);
 
     void jobFailedWithException(ServiceWorkerJob&, const Exception&) final;
-    void jobResolvedWithRegistration(ServiceWorkerJob&, const ServiceWorkerRegistrationData&) final;
+    void jobResolvedWithRegistration(ServiceWorkerJob&, ServiceWorkerRegistrationData&&) final;
     void startScriptFetchForJob(ServiceWorkerJob&) final;
     void jobFinishedLoadingScript(ServiceWorkerJob&, const String&) final;
     void jobFailedLoadingScript(ServiceWorkerJob&, const ResourceError&) final;

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -57,13 +57,13 @@
     m_client->jobFailedWithException(*this, exception);
 }
 
-void ServiceWorkerJob::resolvedWithRegistration(const ServiceWorkerRegistrationData& data)
+void ServiceWorkerJob::resolvedWithRegistration(ServiceWorkerRegistrationData&& data)
 {
     ASSERT(currentThread() == m_creationThread);
     ASSERT(!m_completed);
 
     m_completed = true;
-    m_client->jobResolvedWithRegistration(*this, data);
+    m_client->jobResolvedWithRegistration(*this, WTFMove(data));
 }
 
 void ServiceWorkerJob::startScriptFetch()

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -55,7 +55,7 @@
     WEBCORE_EXPORT ~ServiceWorkerJob();
 
     void failedWithException(const Exception&);
-    void resolvedWithRegistration(const ServiceWorkerRegistrationData&);
+    void resolvedWithRegistration(ServiceWorkerRegistrationData&&);
     void startScriptFetch();
 
     ServiceWorkerJobData data() const { return m_jobData; }

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -40,7 +40,7 @@
     virtual ~ServiceWorkerJobClient() { };
 
     virtual void jobFailedWithException(ServiceWorkerJob&, const Exception&) = 0;
-    virtual void jobResolvedWithRegistration(ServiceWorkerJob&, const ServiceWorkerRegistrationData&) = 0;
+    virtual void jobResolvedWithRegistration(ServiceWorkerJob&, ServiceWorkerRegistrationData&&) = 0;
     virtual void startScriptFetchForJob(ServiceWorkerJob&) = 0;
     virtual void jobFinishedLoadingScript(ServiceWorkerJob&, const String&) = 0;
     virtual void jobFailedLoadingScript(ServiceWorkerJob&, const ResourceError&) = 0;

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -30,9 +30,9 @@
 
 namespace WebCore {
 
-ServiceWorkerRegistration::ServiceWorkerRegistration(ScriptExecutionContext& context, const ServiceWorkerRegistrationData& registrationData)
+ServiceWorkerRegistration::ServiceWorkerRegistration(ScriptExecutionContext& context, ServiceWorkerRegistrationData&& registrationData)
     : ActiveDOMObject(&context)
-    , m_registrationData(registrationData)
+    , m_registrationData(WTFMove(registrationData))
 {
     suspendIfNeeded();
 }
@@ -54,22 +54,22 @@
 
 const String& ServiceWorkerRegistration::scope() const
 {
-    return emptyString();
+    return m_registrationData.scopeURL;
 }
 
-ServiceWorkerRegistration::UpdateViaCache ServiceWorkerRegistration::updateViaCache() const
+ServiceWorkerUpdateViaCache ServiceWorkerRegistration::updateViaCache() const
 {
-    return UpdateViaCache::Imports;
+    return m_registrationData.updateViaCache;
 }
 
 void ServiceWorkerRegistration::update(Ref<DeferredPromise>&& promise)
 {
-    promise->reject(Exception(UnknownError, ASCIILiteral("ServiceWorkerRegistration::update not yet implemented")));
+    promise->reject(Exception(NotSupportedError, ASCIILiteral("ServiceWorkerRegistration::update not yet implemented")));
 }
 
 void ServiceWorkerRegistration::unregister(Ref<DeferredPromise>&& promise)
 {
-    promise->reject(Exception(UnknownError, ASCIILiteral("ServiceWorkerRegistration::unregister not yet implemented")));
+    promise->reject(Exception(NotSupportedError, ASCIILiteral("ServiceWorkerRegistration::unregister not yet implemented")));
 }
 
 EventTargetInterface ServiceWorkerRegistration::eventTargetInterface() const
@@ -79,9 +79,19 @@
 
 ScriptExecutionContext* ServiceWorkerRegistration::scriptExecutionContext() const
 {
-    return nullptr;
+    return ActiveDOMObject::scriptExecutionContext();
 }
 
+const char* ServiceWorkerRegistration::activeDOMObjectName() const
+{
+    return "ServiceWorkerRegistration";
+}
+
+bool ServiceWorkerRegistration::canSuspendForDocumentSuspension() const
+{
+    return !hasPendingActivity();
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -39,15 +39,9 @@
 
 class ServiceWorkerRegistration final : public RefCounted<ServiceWorkerRegistration>, public EventTargetWithInlineData, public ActiveDOMObject {
 public:
-    enum class UpdateViaCache {
-        Imports,
-        All,
-        None,
-    };
-
-    static Ref<ServiceWorkerRegistration> create(ScriptExecutionContext& context, const ServiceWorkerRegistrationData& data)
+    static Ref<ServiceWorkerRegistration> create(ScriptExecutionContext& context, ServiceWorkerRegistrationData&& data)
     {
-        return adoptRef(*new ServiceWorkerRegistration(context, data));
+        return adoptRef(*new ServiceWorkerRegistration(context, WTFMove(data)));
     }
 
     virtual ~ServiceWorkerRegistration() = default;
@@ -57,7 +51,7 @@
     ServiceWorker* active();
 
     const String& scope() const;
-    UpdateViaCache updateViaCache() const;
+    ServiceWorkerUpdateViaCache updateViaCache() const;
 
     void update(Ref<DeferredPromise>&&);
     void unregister(Ref<DeferredPromise>&&);
@@ -66,15 +60,15 @@
     using RefCounted::deref;
 
 private:
-    ServiceWorkerRegistration(ScriptExecutionContext&, const ServiceWorkerRegistrationData&);
+    ServiceWorkerRegistration(ScriptExecutionContext&, ServiceWorkerRegistrationData&&);
 
-    virtual EventTargetInterface eventTargetInterface() const;
-    virtual ScriptExecutionContext* scriptExecutionContext() const;
+    EventTargetInterface eventTargetInterface() const final;
+    ScriptExecutionContext* scriptExecutionContext() const final;
     void refEventTarget() final { ref(); }
     void derefEventTarget() final { deref(); }
 
-    const char* activeDOMObjectName() const { return "ServiceWorkerRegistration"; }
-    bool canSuspendForDocumentSuspension() const { return false; }
+    const char* activeDOMObjectName() const final;
+    bool canSuspendForDocumentSuspension() const final;
 
     ServiceWorkerRegistrationData m_registrationData;
 };

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.idl (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.idl	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.idl	2017-10-19 03:29:51 UTC (rev 223652)
@@ -45,9 +45,3 @@
     // event
     attribute EventHandler onupdatefound;
 };
-
-enum ServiceWorkerUpdateViaCache {
-    "imports",
-    "all",
-    "none"
-};

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -32,10 +32,12 @@
 
 ServiceWorkerRegistrationData ServiceWorkerRegistrationData::isolatedCopy() const
 {
-    ServiceWorkerRegistrationData result;
-    result.key = key.isolatedCopy();
-    result.identifier = identifier;
-    return result;
+    return {
+        key.isolatedCopy(),
+        identifier,
+        scopeURL.isolatedCopy(),
+        updateViaCache
+    };
 }
 
 } // namespace WTF

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -31,9 +31,13 @@
 
 namespace WebCore {
 
+enum class ServiceWorkerUpdateViaCache;
+
 struct ServiceWorkerRegistrationData {
     ServiceWorkerRegistrationKey key;
     uint64_t identifier;
+    URL scopeURL;
+    ServiceWorkerUpdateViaCache updateViaCache;
 
     ServiceWorkerRegistrationData isolatedCopy() const;
 
@@ -45,7 +49,7 @@
 template<class Encoder>
 void ServiceWorkerRegistrationData::encode(Encoder& encoder) const
 {
-    encoder << key << identifier;
+    encoder << key << identifier << scopeURL << updateViaCache;
 }
 
 template<class Decoder>
@@ -60,8 +64,18 @@
     decoder >> identifier;
     if (!identifier)
         return std::nullopt;
-    
-    return {{ WTFMove(*key), WTFMove(*identifier) }};
+
+    std::optional<URL> scopeURL;
+    decoder >> scopeURL;
+    if (!scopeURL)
+        return std::nullopt;
+
+    std::optional<ServiceWorkerUpdateViaCache> updateViaCache;
+    decoder >> updateViaCache;
+    if (!updateViaCache)
+        return std::nullopt;
+
+    return { { WTFMove(*key), WTFMove(*identifier), WTFMove(*scopeURL), WTFMove(*updateViaCache) } };
 }
 
 } // namespace WTF

Modified: trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/server/SWClientConnection.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -75,7 +75,7 @@
     job->failedWithException(exceptionData.toException());
 }
 
-void SWClientConnection::jobResolvedInServer(uint64_t jobIdentifier, const ServiceWorkerRegistrationData& registrationData)
+void SWClientConnection::jobResolvedInServer(uint64_t jobIdentifier, ServiceWorkerRegistrationData&& registrationData)
 {
     auto job = m_scheduledJobs.take(jobIdentifier);
     if (!job) {
@@ -83,7 +83,7 @@
         return;
     }
 
-    job->resolvedWithRegistration(registrationData);
+    job->resolvedWithRegistration(WTFMove(registrationData));
 }
 
 void SWClientConnection::startScriptFetchForServer(uint64_t jobIdentifier)

Modified: trunk/Source/WebCore/workers/service/server/SWClientConnection.h (223651 => 223652)


--- trunk/Source/WebCore/workers/service/server/SWClientConnection.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/server/SWClientConnection.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -54,7 +54,7 @@
 
 protected:
     WEBCORE_EXPORT void jobRejectedInServer(uint64_t jobIdentifier, const ExceptionData&);
-    WEBCORE_EXPORT void jobResolvedInServer(uint64_t jobIdentifier, const ServiceWorkerRegistrationData&);
+    WEBCORE_EXPORT void jobResolvedInServer(uint64_t jobIdentifier, ServiceWorkerRegistrationData&&);
     WEBCORE_EXPORT void startScriptFetchForServer(uint64_t jobIdentifier);
 
 private:

Modified: trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp (223651 => 223652)


--- trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp	2017-10-19 03:29:51 UTC (rev 223652)
@@ -34,6 +34,7 @@
 #include "SecurityOrigin.h"
 #include "ServiceWorkerFetchResult.h"
 #include "ServiceWorkerRegistrationData.h"
+#include "ServiceWorkerUpdateViaCache.h"
 #include "WorkerType.h"
 
 namespace WebCore {
@@ -96,8 +97,7 @@
 void SWServerRegistration::scriptContextStarted(SWServer::Connection&, uint64_t identifier, const String& workerID)
 {
     UNUSED_PARAM(workerID);
-
-    resolveCurrentJob(ServiceWorkerRegistrationData { m_registrationKey, identifier });
+    resolveCurrentJob(ServiceWorkerRegistrationData { m_registrationKey, identifier, m_scopeURL, m_updateViaCache.value_or(ServiceWorkerUpdateViaCache::Imports) });
 }
 
 void SWServerRegistration::startNextJob()
@@ -249,7 +249,7 @@
 
 ServiceWorkerRegistrationData SWServerRegistration::data() const
 {
-    return { m_registrationKey, identifier() };
+    return { m_registrationKey, identifier(), m_scopeURL, m_updateViaCache.value_or(ServiceWorkerUpdateViaCache::Imports) };
 }
 
 

Modified: trunk/Source/WebKit/ChangeLog (223651 => 223652)


--- trunk/Source/WebKit/ChangeLog	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebKit/ChangeLog	2017-10-19 03:29:51 UTC (rev 223652)
@@ -1,3 +1,13 @@
+2017-10-18  Chris Dumez  <cdu...@apple.com>
+
+        Implement ServiceWorkerRegistration.scope / updateViaCache
+        https://bugs.webkit.org/show_bug.cgi?id=178497
+
+        Reviewed by Youenn Fablet.
+
+        * Shared/WebCoreArgumentCoders.h:
+        * StorageProcess/ServiceWorker/WebSWServerConnection.cpp:
+
 2017-10-18  Youenn Fablet  <you...@apple.com>
 
         Add preliminary support for ServiceWorker Handle Fetch

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h (223651 => 223652)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2017-10-19 02:26:07 UTC (rev 223651)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2017-10-19 03:29:51 UTC (rev 223652)
@@ -39,6 +39,7 @@
 #include <WebCore/PaymentHeaders.h>
 #include <WebCore/RealtimeMediaSource.h>
 #include <WebCore/ScrollSnapOffsetsInfo.h>
+#include <WebCore/ServiceWorkerUpdateViaCache.h>
 #include <WebCore/StoredCredentialsPolicy.h>
 
 namespace WTF {
@@ -784,4 +785,15 @@
     >;
 };
 
+#if ENABLE(SERVICE_WORKER)
+template <> struct EnumTraits<WebCore::ServiceWorkerUpdateViaCache> {
+    using values = EnumValues<
+        WebCore::ServiceWorkerUpdateViaCache,
+        WebCore::ServiceWorkerUpdateViaCache::Imports,
+        WebCore::ServiceWorkerUpdateViaCache::All,
+        WebCore::ServiceWorkerUpdateViaCache::None
+    >;
+};
+#endif
+
 } // namespace WTF
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to