#include "third_party/blink/renderer/modules/service_worker/service_worker_container.h"
#include <memory>
#include <optional>
#include <utility>
#include "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom-blink.h"
#include "third_party/blink/public/platform/web_fetch_client_settings_object.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_factory.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/dom_exception.h"
#include "third_party/blink/renderer/core/dom/events/native_event_listener.h"
#include "third_party/blink/renderer/core/events/message_event.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
#include "third_party/blink/renderer/core/frame/deprecation/deprecation.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/messaging/blink_transferable_message.h"
#include "third_party/blink/renderer/core/messaging/message_port.h"
#include "third_party/blink/renderer/core/script/script.h"
#include "third_party/blink/renderer/core/script_type_names.h"
#include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_error.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_registration.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h"
#include "third_party/blink/renderer/platform/weborigin/reporting_disposition.h"
#include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
namespace blink {
namespace {
void MaybeRecordThirdPartyServiceWorkerUsage(
ExecutionContext* execution_context) { … }
bool HasFiredDomContentLoaded(const Document& document) { … }
mojom::blink::ServiceWorkerUpdateViaCache ParseUpdateViaCache(
const String& value) { … }
class GetRegistrationCallback : public WebServiceWorkerProvider::
WebServiceWorkerGetRegistrationCallbacks { … };
}
class ServiceWorkerContainer::DomContentLoadedListener final
: public NativeEventListener { … };
const char ServiceWorkerContainer::kSupplementName[] = …;
ServiceWorkerContainer* ServiceWorkerContainer::From(LocalDOMWindow& window) { … }
ServiceWorkerContainer* ServiceWorkerContainer::CreateForTesting(
LocalDOMWindow& window,
std::unique_ptr<WebServiceWorkerProvider> provider) { … }
ServiceWorkerContainer::~ServiceWorkerContainer() { … }
void ServiceWorkerContainer::ContextDestroyed() { … }
void ServiceWorkerContainer::Trace(Visitor* visitor) const { … }
ScriptPromise<ServiceWorkerRegistration>
ServiceWorkerContainer::registerServiceWorker(
ScriptState* script_state,
const String& url,
const RegistrationOptions* options) { … }
void ServiceWorkerContainer::RegisterServiceWorkerInternal(
const KURL& scope_url,
const KURL& script_url,
std::optional<mojom::blink::ScriptType> script_type,
mojom::blink::ServiceWorkerUpdateViaCache update_via_cache,
WebFetchClientSettingsObject fetch_client_settings_object,
std::unique_ptr<CallbackPromiseAdapter<ServiceWorkerRegistration,
ServiceWorkerErrorForUpdate>>
callbacks) { … }
ScriptPromise<ServiceWorkerRegistration>
ServiceWorkerContainer::getRegistration(ScriptState* script_state,
const String& document_url) { … }
ScriptPromise<IDLSequence<ServiceWorkerRegistration>>
ServiceWorkerContainer::getRegistrations(ScriptState* script_state) { … }
void ServiceWorkerContainer::startMessages() { … }
ScriptPromise<ServiceWorkerRegistration> ServiceWorkerContainer::ready(
ScriptState* caller_state,
ExceptionState& exception_state) { … }
void ServiceWorkerContainer::SetController(
WebServiceWorkerObjectInfo info,
bool should_notify_controller_change) { … }
void ServiceWorkerContainer::ReceiveMessage(WebServiceWorkerObjectInfo source,
TransferableMessage message) { … }
void ServiceWorkerContainer::CountFeature(mojom::WebFeature feature) { … }
ExecutionContext* ServiceWorkerContainer::GetExecutionContext() const { … }
const AtomicString& ServiceWorkerContainer::InterfaceName() const { … }
void ServiceWorkerContainer::setOnmessage(EventListener* listener) { … }
EventListener* ServiceWorkerContainer::onmessage() { … }
ServiceWorkerRegistration*
ServiceWorkerContainer::GetOrCreateServiceWorkerRegistration(
WebServiceWorkerRegistrationObjectInfo info) { … }
ServiceWorker* ServiceWorkerContainer::GetOrCreateServiceWorker(
WebServiceWorkerObjectInfo info) { … }
ServiceWorkerContainer::ServiceWorkerContainer(LocalDOMWindow& window)
: … { … }
ServiceWorkerContainer::ReadyProperty*
ServiceWorkerContainer::CreateReadyProperty() { … }
void ServiceWorkerContainer::EnableClientMessageQueue() { … }
void ServiceWorkerContainer::DispatchMessageEvent(
WebServiceWorkerObjectInfo source,
TransferableMessage message) { … }
void ServiceWorkerContainer::OnGetRegistrationForReady(
WebServiceWorkerRegistrationObjectInfo info) { … }
}