Source/WebCore/ChangeLog

 12021-08-31 Chris Dumez <cdumez@apple.com>
 2
 3 Add support for ServiceWorkerGlobalScope.serviceWorker
 4 https://bugs.webkit.org/show_bug.cgi?id=229720
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Add support for ServiceWorkerGlobalScope.serviceWorker:
 9 - https://w3c.github.io/ServiceWorker/#dom-serviceworkerglobalscope-serviceworker
 10
 11 Also add support for the "parsed" initial ServiceWorkerState:
 12 - https://w3c.github.io/ServiceWorker/#enumdef-serviceworkerstate
 13
 14 No new tests, rebaselined existing tests.
 15
 16 * workers/service/ServiceWorker.idl:
 17 * workers/service/ServiceWorkerGlobalScope.cpp:
 18 (WebCore::ServiceWorkerGlobalScope::create):
 19 (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
 20 * workers/service/ServiceWorkerGlobalScope.h:
 21 * workers/service/ServiceWorkerGlobalScope.idl:
 22 * workers/service/ServiceWorkerTypes.h:
 23 * workers/service/context/ServiceWorkerThread.cpp:
 24 (WebCore::ServiceWorkerThread::ServiceWorkerThread):
 25 (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
 26 * workers/service/context/ServiceWorkerThread.h:
 27 * workers/service/context/ServiceWorkerThreadProxy.cpp:
 28 (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
 29 * workers/service/context/ServiceWorkerThreadProxy.h:
 30 * workers/service/server/SWServer.cpp:
 31 (WebCore::SWServer::installContextData):
 32 (WebCore::SWServer::runServiceWorker):
 33 * workers/service/server/SWServerRegistration.cpp:
 34 (WebCore::SWServerRegistration::clear):
 35 * workers/service/server/SWServerToContextConnection.h:
 36 * workers/service/server/SWServerWorker.cpp:
 37 (WebCore::SWServerWorker::SWServerWorker):
 38
1392021-08-31 Kate Cheney <katherine_cheney@apple.com>
240
341 Use after move in ServiceWorkerThreadProxy

Source/WebKit/ChangeLog

 12021-08-31 Chris Dumez <cdumez@apple.com>
 2
 3 Add support for ServiceWorkerGlobalScope.serviceWorker
 4 https://bugs.webkit.org/show_bug.cgi?id=229720
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Add support for ServiceWorkerGlobalScope.serviceWorker:
 9 - https://w3c.github.io/ServiceWorker/#dom-serviceworkerglobalscope-serviceworker
 10
 11 Also add support for the "parsed" initial ServiceWorkerState:
 12 - https://w3c.github.io/ServiceWorker/#enumdef-serviceworkerstate
 13
 14 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
 15 (WebKit::WebSWServerToContextConnection::installServiceWorkerContext):
 16 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
 17 * WebProcess/Storage/WebSWContextManagerConnection.cpp:
 18 (WebKit::WebSWContextManagerConnection::installServiceWorker):
 19 * WebProcess/Storage/WebSWContextManagerConnection.h:
 20 * WebProcess/Storage/WebSWContextManagerConnection.messages.in:
 21
1222021-08-31 Kate Cheney <katherine_cheney@apple.com>
223
324 Use after move in ServiceWorkerThreadProxy

Source/WebCore/workers/service/ServiceWorker.idl

4545ServiceWorker includes AbstractWorker;
4646
4747enum ServiceWorkerState {
 48 "parsed",
4849 "installing",
4950 "installed",
5051 "activating",

Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp

3232#include "ExtendableEvent.h"
3333#include "JSDOMPromiseDeferred.h"
3434#include "SWContextManager.h"
 35#include "ServiceWorker.h"
3536#include "ServiceWorkerClient.h"
3637#include "ServiceWorkerClients.h"
3738#include "ServiceWorkerContainer.h"

@@namespace WebCore {
4445
4546WTF_MAKE_ISO_ALLOCATED_IMPL(ServiceWorkerGlobalScope);
4647
47 Ref<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(ServiceWorkerContextData&& data, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
 48Ref<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
4849{
49  auto scope = adoptRef(*new ServiceWorkerGlobalScope { WTFMove(data), params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider });
 50 auto scope = adoptRef(*new ServiceWorkerGlobalScope { WTFMove(contextData), WTFMove(workerData), params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider });
5051 scope->applyContentSecurityPolicyResponseHeaders(params.contentSecurityPolicyResponseHeaders);
5152 return scope;
5253}
5354
54 ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(ServiceWorkerContextData&& data, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
 55ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
5556 : WorkerGlobalScope(WorkerThreadType::ServiceWorker, params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider)
56  , m_contextData(WTFMove(data))
 57 , m_contextData(WTFMove(contextData))
5758 , m_registration(ServiceWorkerRegistration::getOrCreate(*this, navigator().serviceWorker(), WTFMove(m_contextData.registration)))
 59 , m_serviceWorker(ServiceWorker::getOrCreate(*this, WTFMove(workerData)))
5860 , m_clients(ServiceWorkerClients::create())
5961{
6062}

Source/WebCore/workers/service/ServiceWorkerGlobalScope.h

@@class ServiceWorkerThread;
4545class ServiceWorkerGlobalScope final : public WorkerGlobalScope {
4646 WTF_MAKE_ISO_ALLOCATED(ServiceWorkerGlobalScope);
4747public:
48  static Ref<ServiceWorkerGlobalScope> create(ServiceWorkerContextData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
 48 static Ref<ServiceWorkerGlobalScope> create(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
4949
5050 ~ServiceWorkerGlobalScope();
5151

@@public:
5353
5454 ServiceWorkerClients& clients() { return m_clients.get(); }
5555 ServiceWorkerRegistration& registration() { return m_registration.get(); }
 56 ServiceWorker& serviceWorker() { return m_serviceWorker.get(); }
5657
5758 void skipWaiting(Ref<DeferredPromise>&&);
5859

@@public:
7778 FetchOptions::Destination destination() const final { return FetchOptions::Destination::Serviceworker; }
7879
7980private:
80  ServiceWorkerGlobalScope(ServiceWorkerContextData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
 81 ServiceWorkerGlobalScope(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
8182
8283 bool hasPendingEvents() const { return !m_extendedEvents.isEmpty(); }
8384
8485 ServiceWorkerContextData m_contextData;
8586 Ref<ServiceWorkerRegistration> m_registration;
 87 Ref<ServiceWorker> m_serviceWorker;
8688 Ref<ServiceWorkerClients> m_clients;
8789 HashMap<ServiceWorkerClientIdentifier, ServiceWorkerClient*> m_clientMap;
8890 Vector<Ref<ExtendableEvent>> m_extendedEvents;

Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl

3434] interface ServiceWorkerGlobalScope : WorkerGlobalScope {
3535 [SameObject] readonly attribute ServiceWorkerClients clients;
3636 [SameObject] readonly attribute ServiceWorkerRegistration registration;
 37 [SameObject] readonly attribute ServiceWorker serviceWorker;
3738
3839 [NewObject] Promise<undefined> skipWaiting();
3940

Source/WebCore/workers/service/ServiceWorkerTypes.h

@@enum class ServiceWorkerRegistrationState : uint8_t {
4646};
4747
4848enum class ServiceWorkerState : uint8_t {
 49 Parsed,
4950 Installing,
5051 Installed,
5152 Activating,

@@template <> struct EnumTraits<WebCore::ServiceWorkerRegistrationState> {
105106template <> struct EnumTraits<WebCore::ServiceWorkerState> {
106107 using values = EnumValues<
107108 WebCore::ServiceWorkerState,
 109 WebCore::ServiceWorkerState::Parsed,
108110 WebCore::ServiceWorkerState::Installing,
109111 WebCore::ServiceWorkerState::Installed,
110112 WebCore::ServiceWorkerState::Activating,

Source/WebCore/workers/service/context/ServiceWorkerThread.cpp

@@private:
7373// FIXME: Use a valid WorkerObjectProxy
7474// FIXME: Use valid runtime flags
7575
76 ServiceWorkerThread::ServiceWorkerThread(ServiceWorkerContextData&& data, String&& userAgent, const Settings::Values& settingsValues, WorkerLoaderProxy& loaderProxy, WorkerDebuggerProxy& debuggerProxy, IDBClient::IDBConnectionProxy* idbConnectionProxy, SocketProvider* socketProvider)
77  : WorkerThread({ data.scriptURL, emptyString(), "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), WTFMove(userAgent), platformStrategies()->loaderStrategy()->isOnLine(), data.contentSecurityPolicy, false, data.crossOriginEmbedderPolicy, MonotonicTime::now(), { }, data.workerType, FetchRequestCredentials::Omit, settingsValues }, data.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, data.registration.key.topOrigin().securityOrigin().get(), idbConnectionProxy, socketProvider, JSC::RuntimeFlags::createAllEnabled())
78  , m_serviceWorkerIdentifier(data.serviceWorkerIdentifier)
79  , m_jobDataIdentifier(data.jobDataIdentifier)
80  , m_data(crossThreadCopy(data))
 76ServiceWorkerThread::ServiceWorkerThread(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, String&& userAgent, const Settings::Values& settingsValues, WorkerLoaderProxy& loaderProxy, WorkerDebuggerProxy& debuggerProxy, IDBClient::IDBConnectionProxy* idbConnectionProxy, SocketProvider* socketProvider)
 77 : WorkerThread({ contextData.scriptURL, emptyString(), "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), WTFMove(userAgent), platformStrategies()->loaderStrategy()->isOnLine(), contextData.contentSecurityPolicy, false, contextData.crossOriginEmbedderPolicy, MonotonicTime::now(), { }, contextData.workerType, FetchRequestCredentials::Omit, settingsValues }, contextData.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, contextData.registration.key.topOrigin().securityOrigin().get(), idbConnectionProxy, socketProvider, JSC::RuntimeFlags::createAllEnabled())
 78 , m_serviceWorkerIdentifier(contextData.serviceWorkerIdentifier)
 79 , m_jobDataIdentifier(contextData.jobDataIdentifier)
 80 , m_contextData(crossThreadCopy(contextData))
 81 , m_workerData(crossThreadCopy(workerData))
8182 , m_workerObjectProxy(DummyServiceWorkerThreadProxy::shared())
8283 , m_heartBeatTimeout(SWContextManager::singleton().connection()->shouldUseShortTimeout() ? heartBeatTimeoutForTest : heartBeatTimeout)
8384 , m_heartBeatTimer { *this, &ServiceWorkerThread::heartBeatTimerFired }

@@ServiceWorkerThread::~ServiceWorkerThread() = default;
9091
9192Ref<WorkerGlobalScope> ServiceWorkerThread::createWorkerGlobalScope(const WorkerParameters& params, Ref<SecurityOrigin>&& origin, Ref<SecurityOrigin>&& topOrigin)
9293{
93  RELEASE_ASSERT(m_data);
94  return ServiceWorkerGlobalScope::create(*std::exchange(m_data, std::nullopt), params, WTFMove(origin), *this, WTFMove(topOrigin), idbConnectionProxy(), socketProvider());
 94 RELEASE_ASSERT(m_contextData);
 95 return ServiceWorkerGlobalScope::create(*std::exchange(m_contextData, std::nullopt), *std::exchange(m_workerData, std::nullopt), params, WTFMove(origin), *this, WTFMove(topOrigin), idbConnectionProxy(), socketProvider());
9596}
9697
9798void ServiceWorkerThread::runEventLoop()

Source/WebCore/workers/service/context/ServiceWorkerThread.h

@@protected:
7979 void runEventLoop() override;
8080
8181private:
82  WEBCORE_EXPORT ServiceWorkerThread(ServiceWorkerContextData&&, String&& userAgent, const Settings::Values&, WorkerLoaderProxy&, WorkerDebuggerProxy&, IDBClient::IDBConnectionProxy*, SocketProvider*);
 82 WEBCORE_EXPORT ServiceWorkerThread(ServiceWorkerContextData&&, ServiceWorkerData&&, String&& userAgent, const Settings::Values&, WorkerLoaderProxy&, WorkerDebuggerProxy&, IDBClient::IDBConnectionProxy*, SocketProvider*);
8383
8484 bool isServiceWorkerThread() const final { return true; }
8585 void finishedEvaluatingScript() final;

@@private:
9595
9696 ServiceWorkerIdentifier m_serviceWorkerIdentifier;
9797 std::optional<ServiceWorkerJobDataIdentifier> m_jobDataIdentifier;
98  std::optional<ServiceWorkerContextData> m_data; // Becomes std::nullopt after the ServiceWorkerGlobalScope has been created.
 98 std::optional<ServiceWorkerContextData> m_contextData; // Becomes std::nullopt after the ServiceWorkerGlobalScope has been created.
 99 std::optional<ServiceWorkerData> m_workerData; // Becomes std::nullopt after the ServiceWorkerGlobalScope has been created.
99100 WorkerObjectProxy& m_workerObjectProxy;
100101 bool m_doesHandleFetch { false };
101102

Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp

@@static HashSet<ServiceWorkerThreadProxy*>& allServiceWorkerThreadProxies()
9393 return set;
9494}
9595
96 ServiceWorkerThreadProxy::ServiceWorkerThreadProxy(PageConfiguration&& pageConfiguration, ServiceWorkerContextData&& data, String&& userAgent, CacheStorageProvider& cacheStorageProvider, StorageBlockingPolicy storageBlockingPolicy)
97  : m_page(createPageForServiceWorker(WTFMove(pageConfiguration), data, storageBlockingPolicy))
 96ServiceWorkerThreadProxy::ServiceWorkerThreadProxy(PageConfiguration&& pageConfiguration, ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, String&& userAgent, CacheStorageProvider& cacheStorageProvider, StorageBlockingPolicy storageBlockingPolicy)
 97 : m_page(createPageForServiceWorker(WTFMove(pageConfiguration), contextData, storageBlockingPolicy))
9898 , m_document(*m_page->mainFrame().document())
9999#if ENABLE(REMOTE_INSPECTOR)
100  , m_remoteDebuggable(makeUnique<ServiceWorkerDebuggable>(*this, data))
 100 , m_remoteDebuggable(makeUnique<ServiceWorkerDebuggable>(*this, contextData))
101101#endif
102  , m_serviceWorkerThread(ServiceWorkerThread::create(WTFMove(data), WTFMove(userAgent), m_document->settingsValues(), *this, *this, idbConnectionProxy(m_document), m_document->socketProvider()))
 102 , m_serviceWorkerThread(ServiceWorkerThread::create(WTFMove(contextData), WTFMove(workerData), WTFMove(userAgent), m_document->settingsValues(), *this, *this, idbConnectionProxy(m_document), m_document->socketProvider()))
103103 , m_cacheStorageProvider(cacheStorageProvider)
104104 , m_inspectorProxy(*this)
105105{

Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h

@@public:
8585 WEBCORE_EXPORT bool lastNavigationWasAppInitiated();
8686
8787private:
88  WEBCORE_EXPORT ServiceWorkerThreadProxy(PageConfiguration&&, ServiceWorkerContextData&&, String&& userAgent, CacheStorageProvider&, StorageBlockingPolicy);
 88 WEBCORE_EXPORT ServiceWorkerThreadProxy(PageConfiguration&&, ServiceWorkerContextData&&, ServiceWorkerData&&, String&& userAgent, CacheStorageProvider&, StorageBlockingPolicy);
8989
9090 WEBCORE_EXPORT static void networkStateChanged(bool isOnLine);
9191

Source/WebCore/workers/service/server/SWServer.cpp

@@void SWServer::installContextData(const ServiceWorkerContextData& data)
727727 registration->setPreInstallationWorker(worker.ptr());
728728 worker->setState(SWServerWorker::State::Running);
729729 auto userAgent = worker->userAgent();
730  auto result = m_runningOrTerminatingWorkers.add(data.serviceWorkerIdentifier, WTFMove(worker));
 730 auto result = m_runningOrTerminatingWorkers.add(data.serviceWorkerIdentifier, worker.copyRef());
731731 ASSERT_UNUSED(result, result.isNewEntry);
732732
733  connection->installServiceWorkerContext(data, userAgent);
 733 connection->installServiceWorkerContext(data, worker->data(), userAgent);
734734}
735735
736736void SWServer::runServiceWorkerIfNecessary(ServiceWorkerIdentifier identifier, RunServiceWorkerCallback&& callback)

@@bool SWServer::runServiceWorker(ServiceWorkerIdentifier identifier)
798798 auto* contextConnection = worker->contextConnection();
799799 ASSERT(contextConnection);
800800
801  contextConnection->installServiceWorkerContext(worker->contextData(), worker->userAgent());
 801 contextConnection->installServiceWorkerContext(worker->contextData(), worker->data(), worker->userAgent());
802802
803803 return true;
804804}

Source/WebCore/workers/service/server/SWServerRegistration.cpp

@@bool SWServerRegistration::tryClear()
233233void SWServerRegistration::clear()
234234{
235235 if (m_preInstallationWorker) {
236  ASSERT(m_preInstallationWorker->state() == ServiceWorkerState::Redundant);
 236 ASSERT(m_preInstallationWorker->state() == ServiceWorkerState::Parsed);
237237 m_preInstallationWorker->terminate();
238238 m_preInstallationWorker = nullptr;
239239 }

Source/WebCore/workers/service/server/SWServerToContextConnection.h

@@public:
5151 SWServerToContextConnectionIdentifier identifier() const { return m_identifier; }
5252
5353 // Messages to the SW host process
54  virtual void installServiceWorkerContext(const ServiceWorkerContextData&, const String& userAgent) = 0;
 54 virtual void installServiceWorkerContext(const ServiceWorkerContextData&, const ServiceWorkerData&, const String& userAgent) = 0;
5555 virtual void updateAppInitiatedValue(ServiceWorkerIdentifier, LastNavigationWasAppInitiated) = 0;
5656 virtual void fireInstallEvent(ServiceWorkerIdentifier) = 0;
5757 virtual void fireActivateEvent(ServiceWorkerIdentifier) = 0;

Source/WebCore/workers/service/server/SWServerWorker.cpp

@@SWServerWorker::SWServerWorker(SWServer& server, SWServerRegistration& registrat
5454 : m_server(makeWeakPtr(server))
5555 , m_registrationKey(registration.key())
5656 , m_registration(makeWeakPtr(registration))
57  , m_data { identifier, scriptURL, ServiceWorkerState::Redundant, type, registration.identifier() }
 57 , m_data { identifier, scriptURL, ServiceWorkerState::Parsed, type, registration.identifier() }
5858 , m_script(script)
5959 , m_certificateInfo(certificateInfo)
6060 , m_contentSecurityPolicy(contentSecurityPolicy)

Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp

@@void WebSWServerToContextConnection::postMessageToServiceWorkerClient(const Serv
8787 connection->postMessageToServiceWorkerClient(destinationIdentifier.contextIdentifier, message, sourceIdentifier, sourceOrigin);
8888}
8989
90 void WebSWServerToContextConnection::installServiceWorkerContext(const ServiceWorkerContextData& data, const String& userAgent)
 90void WebSWServerToContextConnection::installServiceWorkerContext(const ServiceWorkerContextData& contextData, const ServiceWorkerData& workerData, const String& userAgent)
9191{
92  send(Messages::WebSWContextManagerConnection::InstallServiceWorker { data, userAgent });
 92 send(Messages::WebSWContextManagerConnection::InstallServiceWorker { contextData, workerData, userAgent });
9393}
9494
9595void WebSWServerToContextConnection::updateAppInitiatedValue(ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::LastNavigationWasAppInitiated lastNavigationWasAppInitiated)

Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h

@@private:
8585 void postMessageToServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier& destinationIdentifier, const WebCore::MessageWithMessagePorts&, WebCore::ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin);
8686
8787 // Messages to the SW host WebProcess
88  void installServiceWorkerContext(const WebCore::ServiceWorkerContextData&, const String& userAgent) final;
 88 void installServiceWorkerContext(const WebCore::ServiceWorkerContextData&, const WebCore::ServiceWorkerData&, const String& userAgent) final;
8989 void updateAppInitiatedValue(WebCore::ServiceWorkerIdentifier, WebCore::LastNavigationWasAppInitiated) final;
9090 void fireInstallEvent(WebCore::ServiceWorkerIdentifier) final;
9191 void fireActivateEvent(WebCore::ServiceWorkerIdentifier) final;

Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp

@@void WebSWContextManagerConnection::updateAppInitiatedValue(ServiceWorkerIdentif
141141 serviceWorkerThreadProxy->setLastNavigationWasAppInitiated(lastNavigationWasAppInitiated == WebCore::LastNavigationWasAppInitiated::Yes);
142142}
143143
144 void WebSWContextManagerConnection::installServiceWorker(ServiceWorkerContextData&& data, String&& userAgent)
 144void WebSWContextManagerConnection::installServiceWorker(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, String&& userAgent)
145145{
146146 auto pageConfiguration = pageConfigurationWithEmptyClients(WebProcess::singleton().sessionID());
147147

@@void WebSWContextManagerConnection::installServiceWorker(ServiceWorkerContextDat
159159 pageConfiguration.loaderClientForMainFrame = makeUniqueRef<ServiceWorkerFrameLoaderClient>(m_webPageProxyID, m_pageID, FrameIdentifier::generate(), effectiveUserAgent);
160160
161161#if !RELEASE_LOG_DISABLED
162  auto serviceWorkerIdentifier = data.serviceWorkerIdentifier;
 162 auto serviceWorkerIdentifier = contextData.serviceWorkerIdentifier;
163163#endif
164164
165  auto lastNavigationWasAppInitiated = data.lastNavigationWasAppInitiated;
166  auto serviceWorkerThreadProxy = ServiceWorkerThreadProxy::create(WTFMove(pageConfiguration), WTFMove(data), WTFMove(effectiveUserAgent), WebProcess::singleton().cacheStorageProvider(), m_storageBlockingPolicy);
 165 auto lastNavigationWasAppInitiated = contextData.lastNavigationWasAppInitiated;
 166 auto serviceWorkerThreadProxy = ServiceWorkerThreadProxy::create(WTFMove(pageConfiguration), WTFMove(contextData), WTFMove(workerData), WTFMove(effectiveUserAgent), WebProcess::singleton().cacheStorageProvider(), m_storageBlockingPolicy);
167167
168168 if (lastNavigationWasAppInitiated)
169169 serviceWorkerThreadProxy->setLastNavigationWasAppInitiated(lastNavigationWasAppInitiated == WebCore::LastNavigationWasAppInitiated::Yes);

Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h

@@private:
8686 // IPC messages.
8787 void serviceWorkerStarted(std::optional<WebCore::ServiceWorkerJobDataIdentifier>, WebCore::ServiceWorkerIdentifier, bool doesHandleFetch) final;
8888 void serviceWorkerFailedToStart(std::optional<WebCore::ServiceWorkerJobDataIdentifier>, WebCore::ServiceWorkerIdentifier, const String& exceptionMessage) final;
89  void installServiceWorker(WebCore::ServiceWorkerContextData&&, String&& userAgent);
 89 void installServiceWorker(WebCore::ServiceWorkerContextData&&, WebCore::ServiceWorkerData&&, String&& userAgent);
9090 void updateAppInitiatedValue(WebCore::ServiceWorkerIdentifier, WebCore::LastNavigationWasAppInitiated);
9191 void startFetch(WebCore::SWServerConnectionIdentifier, WebCore::ServiceWorkerIdentifier, WebCore::FetchIdentifier, WebCore::ResourceRequest&&, WebCore::FetchOptions&&, IPC::FormDataReference&&, String&& referrer);
9292 void cancelFetch(WebCore::SWServerConnectionIdentifier, WebCore::ServiceWorkerIdentifier, WebCore::FetchIdentifier);

Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in

2323#if ENABLE(SERVICE_WORKER)
2424
2525messages -> WebSWContextManagerConnection NotRefCounted {
26  InstallServiceWorker(struct WebCore::ServiceWorkerContextData contextData, String userAgent)
 26 InstallServiceWorker(struct WebCore::ServiceWorkerContextData contextData, struct WebCore::ServiceWorkerData workerData, String userAgent)
2727 UpdateAppInitiatedValue(WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, enum:bool WebCore::LastNavigationWasAppInitiated lastNavigationWasAppInitiated)
2828 StartFetch(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::FetchIdentifier fetchIdentifier, WebCore::ResourceRequest request, struct WebCore::FetchOptions options, IPC::FormDataReference requestBody, String referrer)
2929 CancelFetch(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::FetchIdentifier fetchIdentifier)

LayoutTests/imported/w3c/ChangeLog

 12021-08-31 Chris Dumez <cdumez@apple.com>
 2
 3 Add support for ServiceWorkerGlobalScope.serviceWorker
 4 https://bugs.webkit.org/show_bug.cgi?id=229720
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Rebaseline WPT tests that are now passing.
 9
 10 * web-platform-tests/html/cross-origin-opener-policy/popup-coop-by-sw.https-expected.txt:
 11 * web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.serviceworker-expected.txt:
 12
1132021-08-31 Marcos Caceres <marcos@marcosc.com>
214
315 [Payment Request] Calling PaymentRequest's show() should consume user activation

LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-opener-policy/popup-coop-by-sw.https-expected.txt

 1CONSOLE MESSAGE: Unhandled Promise Rejection: TypeError: Load failed
12
2 Harness Error (TIMEOUT), message = null
3 
4 TIMEOUT opener:basic, openee:basic, sw:basic Test timed out
5 NOTRUN opener:basic, openee:basic, sw:coi
6 NOTRUN opener:basic, openee:coi, sw:basic
7 NOTRUN opener:basic, openee:coi, sw:coi
8 NOTRUN opener:coi, openee:basic, sw:basic
9 NOTRUN opener:coi, openee:basic, sw:coi
10 NOTRUN opener:coi, openee:coi, sw:basic
11 NOTRUN opener:coi, openee:coi, sw:coi
 3PASS opener:basic, openee:basic, sw:basic
 4PASS opener:basic, openee:basic, sw:coi
 5PASS opener:basic, openee:coi, sw:basic
 6PASS opener:basic, openee:coi, sw:coi
 7PASS opener:coi, openee:basic, sw:basic
 8PASS opener:coi, openee:basic, sw:coi
 9PASS opener:coi, openee:coi, sw:basic
 10PASS opener:coi, openee:coi, sw:coi
1211

LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.serviceworker-expected.txt

11
2 FAIL First run assert_true: self.serviceWorker exists expected true got false
3 FAIL Can post message to self during startup assert_true: self.serviceWorker exists expected true got false
4 FAIL During install assert_true: self.serviceWorker exists expected true got false
5 FAIL During activate assert_true: self.serviceWorker exists expected true got false
 2PASS First run
 3PASS Can post message to self during startup
 4PASS During install
 5PASS During activate
66