diff options
Diffstat (limited to 'chromium/third_party/blink/public/mojom/service_worker/service_worker_container.mojom')
-rw-r--r-- | chromium/third_party/blink/public/mojom/service_worker/service_worker_container.mojom | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/chromium/third_party/blink/public/mojom/service_worker/service_worker_container.mojom b/chromium/third_party/blink/public/mojom/service_worker/service_worker_container.mojom new file mode 100644 index 00000000000..e625c65fdbe --- /dev/null +++ b/chromium/third_party/blink/public/mojom/service_worker/service_worker_container.mojom @@ -0,0 +1,148 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module blink.mojom; + +import "mojo/public/mojom/base/string16.mojom"; +import "third_party/blink/public/mojom/messaging/transferable_message.mojom"; +import "third_party/blink/public/mojom/service_worker/controller_service_worker.mojom"; +import "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom"; +import "third_party/blink/public/mojom/service_worker/service_worker_object.mojom"; +import "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom"; +import "third_party/blink/public/platform/web_feature.mojom"; +import "url/mojom/url.mojom"; + +// Used for EnsureControllerServiceWorker() to indicate why a controllee needs +// a controller ServiceWorker. +enum ControllerServiceWorkerPurpose { + FETCH_SUB_RESOURCE +}; + +// ServiceWorkerContainerHost is an interface implemented by the browser +// process. The renderer process uses this interface to request the browser +// process to do operations involving service worker registrations. +// +// This interface is associated with its counterpart ServiceWorkerContainer. +// The message pipe it's used on depends on the container type. +// - For service workers: +// Associated with EmbeddedWorkerInstanceClient, which is on a dedicated +// message pipe. +// - For shared workers (S13nSW): +// Associated with SharedWorkerFactory, which is on a dedicated message +// pipe. +// - For shared workers (non-S13nSW): +// Associated with ServiceWorkerDispatcherHost, which is on the +// channel-associated interface to the renderer process. +// - For documents: +// Associated with ServiceWorkerDispatcherHost, which is on the +// channel-associated interface to the renderer process. +interface ServiceWorkerContainerHost { + // Corresponds to navigator.serviceWorker.register(). + // Registers a service worker from |script_url| with |options|. + // On success, |error| is kNone with |registration| set. + // Otherwise, |error| and |error_msg| describe the failure. + Register(url.mojom.Url script_url, + ServiceWorkerRegistrationOptions options) + => (ServiceWorkerErrorType error, + string? error_msg, + ServiceWorkerRegistrationObjectInfo? registration); + + // Corresponds to navigator.serviceWorker.getRegistration(). + // Gets the service worker registration for the |client_url|. + // On success, |error| is kNone with |registration| set. + // In case there is no registration at |client_url|, or the registration is + // uninstalling, |error| is still kNone but with null |registration|. + // Otherwise, |error| and |error_msg| describe the failure. + GetRegistration(url.mojom.Url client_url) + => (ServiceWorkerErrorType error, + string? error_msg, + ServiceWorkerRegistrationObjectInfo? registration); + + // Corresponds to navigator.serviceWorker.getRegistrations(). + // Gets all service worker registrations which have the same origin with + // the ServiceWorkerContainer that this interface hosts. + // On success, |error| is kNone with |infos| set. Otherwise, |error| and + // |error_msg| describe the failure. + GetRegistrations() + => (ServiceWorkerErrorType error, + string? error_msg, + array<ServiceWorkerRegistrationObjectInfo>? infos); + + // Corresponds to navigator.serviceWorker.ready. + // Returns the service worker registration for the ServiceWorkerContainer that + // this interface hosts, once such a registration exists and has an active + // service worker. + GetRegistrationForReady() + => (ServiceWorkerRegistrationObjectInfo? registration); + + // S13nServiceWorker: + // Returns a Mojo end point to the controller ServiceWorker. This may start a + // service worker instance in a renderer process if the corresponding + // instance is not alive. + // This method must be called only by the controllees. + // If the browser fails to start the service worker it is propagated as a + // connection error of the returned pipe. The detailed error reasons are not + // reported to the controllees, but the browser process is responsible for + // properly handling the failure and recording the reasons. + // |purpose| is used for UMA. + EnsureControllerServiceWorker(ControllerServiceWorker& controller, + ControllerServiceWorkerPurpose purpose); + + // S13nServiceWorker: + // Makes a new endpoint to this ServiceWorkerContainerHost. + CloneContainerHost(ServiceWorkerContainerHost& container_host); + + // Does nothing but calls the callback. Useful for pumping the message pipe + // for this interface and associated interfaces: when the callback is called, + // you know all incoming messages up to the Ping() call have been received. + Ping() => (); + + // S13nServiceWorker: + // Gives a hint to the browser process to update the service worker after a + // controlled page load. This message is meant to be sent at a time when page + // load is no longer busy, so update doesn't adversely affect performance. + // The browser process can possibly coalesce hints for the same service + // worker into a single update. + HintToUpdateServiceWorker(); +}; + +// ServiceWorkerContainer is an interface implemented by the renderer process. +// The browser process uses this interface to send messages to documents or the +// service worker. +// +// Roughly corresponds to the web-exposed ServiceWorkerContainer interface, +// i.e., navigator.serviceWorker. Actually, the plan is for this interface to be +// used for anything that could access a ServiceWorkerRegistration or +// ServiceWorker object. For example, ServiceWorkerGlobalScope needs to be +// connected to this, since it has self.registration, even though we don’t +// implement navigator.serviceWorker for Worker yet. But eventually anything +// that can touch these objects should be a ServiceWorkerContainer, so it’s OK +// to use this name. +// +// This interface is associated with its counterpart, +// ServiceWorkerContainerHost, as they are sent on the same master interface +// together. See ServiceWorkerContainerHost for documentation about the message +// pipe they live on. +interface ServiceWorkerContainer { + // Corresponds to setting ServiceWorkerContainer#controller. + // If |controller_info| is invalid (its |object_info| is null), then + // ServiceWorkerContainer#controller is cleared. + // If |controller_info| is valid, |used_features| is the set of + // features the controller has used, for UseCounter purposes. + // If |should_notify_controllerchange| is true, dispatch a 'controllerchange' + // event. + SetController(ControllerServiceWorkerInfo controller_info, + array<WebFeature> used_features, + bool should_notify_controllerchange); + + // Corresponds to Client#postMessage(). + // Sends |message| from the service worker |source| to this service worker + // client. + PostMessageToClient(ServiceWorkerObjectInfo source, + TransferableMessage message); + + // Notifies this service worker client that its controller used a |feature|, + // for UseCounter purposes. + CountFeature(WebFeature feature); +}; |