Changeset 281854 in webkit


Ignore:
Timestamp:
Sep 1, 2021 9:30:39 AM (11 months ago)
Author:
Chris Dumez
Message:

Add support for ServiceWorkerGlobalScope.serviceWorker
https://bugs.webkit.org/show_bug.cgi?id=229720

Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

Rebaseline WPT tests that are now passing.

  • web-platform-tests/html/cross-origin-opener-policy/popup-coop-by-sw.https-expected.txt:
  • web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.serviceworker-expected.txt:

Source/WebCore:

Add support for ServiceWorkerGlobalScope.serviceWorker:

Also add support for the "parsed" initial ServiceWorkerState:

No new tests, rebaselined existing tests.

  • workers/service/ServiceWorker.idl:
  • workers/service/ServiceWorkerGlobalScope.cpp:

(WebCore::ServiceWorkerGlobalScope::create):
(WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):

  • workers/service/ServiceWorkerGlobalScope.h:
  • workers/service/ServiceWorkerGlobalScope.idl:
  • workers/service/ServiceWorkerTypes.h:
  • workers/service/context/ServiceWorkerThread.cpp:

(WebCore::ServiceWorkerThread::ServiceWorkerThread):
(WebCore::ServiceWorkerThread::createWorkerGlobalScope):

  • workers/service/context/ServiceWorkerThread.h:
  • workers/service/context/ServiceWorkerThreadProxy.cpp:

(WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

  • workers/service/context/ServiceWorkerThreadProxy.h:
  • workers/service/server/SWServer.cpp:

(WebCore::SWServer::installContextData):
(WebCore::SWServer::runServiceWorker):

  • workers/service/server/SWServerRegistration.cpp:

(WebCore::SWServerRegistration::clear):

  • workers/service/server/SWServerToContextConnection.h:
  • workers/service/server/SWServerWorker.cpp:

(WebCore::SWServerWorker::SWServerWorker):

Source/WebKit:

Add support for ServiceWorkerGlobalScope.serviceWorker:

Also add support for the "parsed" initial ServiceWorkerState:

  • NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:

(WebKit::WebSWServerToContextConnection::installServiceWorkerContext):

  • NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
  • WebProcess/Storage/WebSWContextManagerConnection.cpp:

(WebKit::WebSWContextManagerConnection::installServiceWorker):

  • WebProcess/Storage/WebSWContextManagerConnection.h:
  • WebProcess/Storage/WebSWContextManagerConnection.messages.in:
Location:
trunk
Files:
38 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/TestExpectations

    r281842 r281854  
    408408imported/w3c/web-platform-tests/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html [ DumpJSConsoleLogInStdErr ]
    409409imported/w3c/web-platform-tests/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html [ DumpJSConsoleLogInStdErr ]
     410imported/w3c/web-platform-tests/html/cross-origin-opener-policy/popup-coop-by-sw.https.html [ DumpJSConsoleLogInStdErr ]
    410411imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-network-error.sub.html [ DumpJSConsoleLogInStdErr ]
    411412imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/css-module/integrity.html [ DumpJSConsoleLogInStdErr ]
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r281845 r281854  
     12021-09-01  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 Youenn Fablet.
     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-09-01  Myles C. Maxfield  <mmaxfield@apple.com>
    214
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-opener-policy/popup-coop-by-sw.https-expected.txt

    r281775 r281854  
    11
    2 Harness Error (TIMEOUT), message = null
     2PASS opener:basic, openee:basic, sw:basic
     3PASS opener:basic, openee:basic, sw:coi
     4PASS opener:basic, openee:coi, sw:basic
     5PASS opener:basic, openee:coi, sw:coi
     6PASS opener:coi, openee:basic, sw:basic
     7PASS opener:coi, openee:basic, sw:coi
     8PASS opener:coi, openee:coi, sw:basic
     9PASS opener:coi, openee:coi, sw:coi
    310
    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
    12 
  • trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/global-serviceworker.https.any.serviceworker-expected.txt

    r253457 r281854  
    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
  • trunk/Source/WTF/wtf/URL.cpp

    r280626 r281854  
    7373}
    7474
    75 URL URL::isolatedCopy() const
     75URL URL::isolatedCopy() const &
    7676{
    7777    URL result = *this;
    7878    result.m_string = result.m_string.isolatedCopy();
     79    return result;
     80}
     81
     82URL URL::isolatedCopy() &&
     83{
     84    URL result = *this;
     85    result.m_string = WTFMove(result.m_string).isolatedCopy();
    7986    return result;
    8087}
  • trunk/Source/WTF/wtf/URL.h

    r281258 r281854  
    7676    // thread. Since the underlying StringImpl objects are immutable, there's
    7777    // no other reason to ever prefer isolatedCopy() over plain old assignment.
    78     WTF_EXPORT_PRIVATE URL isolatedCopy() const;
     78    WTF_EXPORT_PRIVATE URL isolatedCopy() const &;
     79    WTF_EXPORT_PRIVATE URL isolatedCopy() &&;
    7980
    8081    bool isNull() const;
  • trunk/Source/WebCore/ChangeLog

    r281852 r281854  
     12021-09-01  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 Youenn Fablet.
     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-09-01  Eric Carlson  <eric.carlson@apple.com>
    240
  • trunk/Source/WebCore/loader/CrossOriginEmbedderPolicy.cpp

    r281055 r281854  
    6565}
    6666
    67 CrossOriginEmbedderPolicy CrossOriginEmbedderPolicy::isolatedCopy() const
     67CrossOriginEmbedderPolicy CrossOriginEmbedderPolicy::isolatedCopy() const &
    6868{
    6969    return {
     
    7272        reportOnlyValue,
    7373        reportOnlyReportingEndpoint.isolatedCopy()
     74    };
     75}
     76
     77CrossOriginEmbedderPolicy CrossOriginEmbedderPolicy::isolatedCopy() &&
     78{
     79    return {
     80        value,
     81        WTFMove(reportingEndpoint).isolatedCopy(),
     82        reportOnlyValue,
     83        WTFMove(reportOnlyReportingEndpoint).isolatedCopy()
    7484    };
    7585}
  • trunk/Source/WebCore/loader/CrossOriginEmbedderPolicy.h

    r281055 r281854  
    4646    String reportOnlyReportingEndpoint;
    4747
    48     CrossOriginEmbedderPolicy isolatedCopy() const;
     48    CrossOriginEmbedderPolicy isolatedCopy() const &;
     49    CrossOriginEmbedderPolicy isolatedCopy() &&;
    4950    template<class Encoder> void encode(Encoder&) const;
    5051    template<class Decoder> static std::optional<CrossOriginEmbedderPolicy> decode(Decoder&);
  • trunk/Source/WebCore/page/SecurityOriginData.cpp

    r278253 r281854  
    116116}
    117117
    118 SecurityOriginData SecurityOriginData::isolatedCopy() const
     118SecurityOriginData SecurityOriginData::isolatedCopy() const &
    119119{
    120120    SecurityOriginData result;
     
    122122    result.protocol = protocol.isolatedCopy();
    123123    result.host = host.isolatedCopy();
     124    result.port = port;
     125
     126    return result;
     127}
     128
     129SecurityOriginData SecurityOriginData::isolatedCopy() &&
     130{
     131    SecurityOriginData result;
     132
     133    result.protocol = WTFMove(protocol).isolatedCopy();
     134    result.host = WTFMove(host).isolatedCopy();
    124135    result.port = port;
    125136
  • trunk/Source/WebCore/page/SecurityOriginData.h

    r278253 r281854  
    6565    std::optional<uint16_t> port;
    6666
    67     WEBCORE_EXPORT SecurityOriginData isolatedCopy() const;
     67    WEBCORE_EXPORT SecurityOriginData isolatedCopy() const &;
     68    WEBCORE_EXPORT SecurityOriginData isolatedCopy() &&;
    6869
    6970    // Serialize the security origin to a string that could be used as part of
  • trunk/Source/WebCore/workers/service/ServiceWorker.idl

    r281808 r281854  
    4646
    4747enum ServiceWorkerState {
     48    "parsed",
    4849    "installing",
    4950    "installed",
  • trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp

    r280953 r281854  
    3232namespace WebCore {
    3333
    34 ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() const
     34ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() const &
    3535{
    3636    return {
     
    5151}
    5252
     53ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() &&
     54{
     55    return {
     56        jobDataIdentifier,
     57        WTFMove(registration).isolatedCopy(),
     58        serviceWorkerIdentifier,
     59        WTFMove(script).isolatedCopy(),
     60        WTFMove(certificateInfo).isolatedCopy(),
     61        WTFMove(contentSecurityPolicy).isolatedCopy(),
     62        WTFMove(crossOriginEmbedderPolicy).isolatedCopy(),
     63        WTFMove(referrerPolicy).isolatedCopy(),
     64        WTFMove(scriptURL).isolatedCopy(),
     65        workerType,
     66        loadedFromDisk,
     67        lastNavigationWasAppInitiated,
     68        crossThreadCopy(WTFMove(scriptResourceMap))
     69    };
     70}
     71
    5372} // namespace WebCore
    5473
  • trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h

    r280953 r281854  
    9898    template<class Decoder> static std::optional<ServiceWorkerContextData> decode(Decoder&);
    9999
    100     ServiceWorkerContextData isolatedCopy() const;
     100    ServiceWorkerContextData isolatedCopy() const &;
     101    ServiceWorkerContextData isolatedCopy() &&;
    101102};
    102103
  • trunk/Source/WebCore/workers/service/ServiceWorkerData.cpp

    r225198 r281854  
    3131namespace WebCore {
    3232
    33 ServiceWorkerData ServiceWorkerData::isolatedCopy() const
     33ServiceWorkerData ServiceWorkerData::isolatedCopy() const &
    3434{
    3535    return {
     
    4242}
    4343
     44ServiceWorkerData ServiceWorkerData::isolatedCopy() &&
     45{
     46    return {
     47        identifier,
     48        WTFMove(scriptURL).isolatedCopy(),
     49        state,
     50        type,
     51        registrationIdentifier
     52    };
     53}
     54
    4455} // namespace WebCore
    4556
  • trunk/Source/WebCore/workers/service/ServiceWorkerData.h

    r278253 r281854  
    4242    ServiceWorkerRegistrationIdentifier registrationIdentifier;
    4343
    44     ServiceWorkerData isolatedCopy() const;
     44    ServiceWorkerData isolatedCopy() const &;
     45    ServiceWorkerData isolatedCopy() &&;
    4546
    4647    template<class Encoder> void encode(Encoder&) const;
  • trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp

    r275465 r281854  
    3333#include "JSDOMPromiseDeferred.h"
    3434#include "SWContextManager.h"
     35#include "ServiceWorker.h"
    3536#include "ServiceWorkerClient.h"
    3637#include "ServiceWorkerClients.h"
     
    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{
  • trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h

    r275650 r281854  
    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();
     
    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>&&);
     
    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(); }
     
    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;
  • trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl

    r277830 r281854  
    3535    [SameObject] readonly attribute ServiceWorkerClients clients;
    3636    [SameObject] readonly attribute ServiceWorkerRegistration registration;
     37    [SameObject] readonly attribute ServiceWorker serviceWorker;
    3738
    3839    [NewObject] Promise<undefined> skipWaiting();
  • trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp

    r278253 r281854  
    3131namespace WebCore {
    3232
    33 ServiceWorkerRegistrationData ServiceWorkerRegistrationData::isolatedCopy() const
     33ServiceWorkerRegistrationData ServiceWorkerRegistrationData::isolatedCopy() const &
    3434{
    3535    return {
     
    3939        updateViaCache,
    4040        lastUpdateTime,
    41         installingWorker ? std::optional<ServiceWorkerData>(installingWorker->isolatedCopy()) : std::nullopt,
    42         waitingWorker ? std::optional<ServiceWorkerData>(waitingWorker->isolatedCopy()) : std::nullopt,
    43         activeWorker ? std::optional<ServiceWorkerData>(activeWorker->isolatedCopy()) : std::nullopt,
     41        crossThreadCopy(installingWorker),
     42        crossThreadCopy(waitingWorker),
     43        crossThreadCopy(activeWorker),
     44    };
     45}
     46
     47ServiceWorkerRegistrationData ServiceWorkerRegistrationData::isolatedCopy() &&
     48{
     49    return {
     50        WTFMove(key).isolatedCopy(),
     51        identifier,
     52        WTFMove(scopeURL).isolatedCopy(),
     53        updateViaCache,
     54        lastUpdateTime,
     55        crossThreadCopy(WTFMove(installingWorker)),
     56        crossThreadCopy(WTFMove(waitingWorker)),
     57        crossThreadCopy(WTFMove(activeWorker)),
    4458    };
    4559}
  • trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationData.h

    r278253 r281854  
    5050    std::optional<ServiceWorkerData> activeWorker;
    5151
    52     ServiceWorkerRegistrationData isolatedCopy() const;
     52    ServiceWorkerRegistrationData isolatedCopy() const &;
     53    ServiceWorkerRegistrationData isolatedCopy() &&;
    5354
    5455    template<class Encoder> void encode(Encoder&) const;
  • trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationKey.cpp

    r278253 r281854  
    6161}
    6262
    63 ServiceWorkerRegistrationKey ServiceWorkerRegistrationKey::isolatedCopy() const
     63ServiceWorkerRegistrationKey ServiceWorkerRegistrationKey::isolatedCopy() const &
    6464{
    6565    return { m_topOrigin.isolatedCopy(), m_scope.isolatedCopy() };
     66}
     67
     68ServiceWorkerRegistrationKey ServiceWorkerRegistrationKey::isolatedCopy() &&
     69{
     70    return { WTFMove(m_topOrigin).isolatedCopy(), WTFMove(m_scope).isolatedCopy() };
    6671}
    6772
  • trunk/Source/WebCore/workers/service/ServiceWorkerRegistrationKey.h

    r278253 r281854  
    5454    bool relatesToOrigin(const SecurityOriginData&) const;
    5555
    56     ServiceWorkerRegistrationKey isolatedCopy() const;
     56    ServiceWorkerRegistrationKey isolatedCopy() const &;
     57    ServiceWorkerRegistrationKey isolatedCopy() &&;
    5758
    5859    template<class Encoder> void encode(Encoder&) const;
  • trunk/Source/WebCore/workers/service/ServiceWorkerTypes.h

    r249832 r281854  
    4747
    4848enum class ServiceWorkerState : uint8_t {
     49    Parsed,
    4950    Installing,
    5051    Installed,
     
    106107    using values = EnumValues<
    107108        WebCore::ServiceWorkerState,
     109        WebCore::ServiceWorkerState::Parsed,
    108110        WebCore::ServiceWorkerState::Installing,
    109111        WebCore::ServiceWorkerState::Installed,
  • trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp

    r280953 r281854  
    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(WTFMove(contextData)))
     81    , m_workerData(crossThreadCopy(WTFMove(workerData)))
    8182    , m_workerObjectProxy(DummyServiceWorkerThreadProxy::shared())
    8283    , m_heartBeatTimeout(SWContextManager::singleton().connection()->shouldUseShortTimeout() ? heartBeatTimeoutForTest : heartBeatTimeout)
     
    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
  • trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h

    r278253 r281854  
    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; }
     
    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 };
  • trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp

    r281831 r281854  
    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)
  • trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h

    r279750 r281854  
    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);
  • trunk/Source/WebCore/workers/service/server/SWServer.cpp

    r280953 r281854  
    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
     
    799799    ASSERT(contextConnection);
    800800
    801     contextConnection->installServiceWorkerContext(worker->contextData(), worker->userAgent());
     801    contextConnection->installServiceWorkerContext(worker->contextData(), worker->data(), worker->userAgent());
    802802
    803803    return true;
  • trunk/Source/WebCore/workers/service/server/SWServerRegistration.cpp

    r279750 r281854  
    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;
  • trunk/Source/WebCore/workers/service/server/SWServerToContextConnection.h

    r279750 r281854  
    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;
  • trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp

    r280953 r281854  
    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)
  • trunk/Source/WebKit/ChangeLog

    r281841 r281854  
     12021-09-01  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 Youenn Fablet.
     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-09-01  Tomoki Imai  <Tomoki.Imai@sony.com>
    223
  • trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp

    r279750 r281854  
    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
  • trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h

    r279750 r281854  
    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;
  • trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp

    r281831 r281854  
    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());
     
    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)
  • trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h

    r281398 r281854  
    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);
  • trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in

    r279750 r281854  
    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)
Note: See TracChangeset for help on using the changeset viewer.