// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module extensions.mojom;
import "mojo/public/mojom/base/values.mojom";
import "url/mojom/url.mojom";
// The context that owns the event listener. This can either be an extension,
// indicated by `extension_id`, or a web page, indicated by `listener_url`.
union EventListenerOwner {
string extension_id;
url.mojom.Url listener_url;
};
// Details about a running javascript context for an extension service worker.
struct ServiceWorkerContext {
// The scope associated with the extension service worker.
// This should generally be the extension root scope.
url.mojom.Url scope_url;
// The service worker version.
int64 version_id;
// The thread ID for the worker running in the renderer.
int32 thread_id;
};
// Details about a listener for a given event.
struct EventListener {
// The owner of the event listener, either an extension or a web page.
EventListenerOwner listener_owner;
// The event name for which the listener was added.
string event_name;
// Details about the service worker context, if and only if this listener was
// added by an extension service worker.
ServiceWorkerContext? service_worker_context;
// The event filter for the listener, if and only if this was for a filtered
// event.
mojo_base.mojom.DictionaryValue? filter;
};
// Implemented in the browser, this interface defines methods for handling
// event router messages from the main thread or service worker.
interface EventRouter {
// Notifies the browser that a new `event_listener` has been added.
AddListenerForMainThread(EventListener event_listener);
// Notifies the browser that the given extension added a listener to an event
// in a service worker.
AddListenerForServiceWorker(EventListener event_listener);
// Notifies the browser that the given extension added a listener to an event
// from a lazy background page.
AddLazyListenerForMainThread(string extension_id,
string event_name);
// Notifies the browser that the given extension added a listener to an event
// from an extension service worker.
AddLazyListenerForServiceWorker(string extension_id,
url.mojom.Url worker_scope_url,
string event_name);
// Notifies the browser that the given `extension_id` or `listener_url` added
// a listener to instances of the named event that satisfy the filter. If it
// has `extension_id` in `listener_owner`, the listener is added for the
// extension. Otherwise, it has a `listener_url` in `listener_owner` and the
// listener is added for the URL.
AddFilteredListenerForMainThread(
EventListenerOwner listener_owner,
string event_name,
mojo_base.mojom.DictionaryValue filter,
bool add_lazy_listener);
// Notifies the browser that the given extension added a listener for a
// service worker to instances of the named event that satisfy the filter.
AddFilteredListenerForServiceWorker(
string extension_id,
string event_name,
ServiceWorkerContext service_worker_context,
mojo_base.mojom.DictionaryValue filter,
bool add_lazy_listener);
// Notifies the browser that an `event_listener` has been removed.
RemoveListenerForMainThread(EventListener event_listener);
// Notifies the browser that the given extension removed a listener from an
// event in a service worker.
RemoveListenerForServiceWorker(EventListener event_listener);
// Notifies the browser that the given extension is no longer interested in
// receiving the given event from a lazy background page.
RemoveLazyListenerForMainThread(string extension_id,
string event_name);
// Notifies the browser that the given extension is no longer interested in
// receiving the given event from an extension service worker.
RemoveLazyListenerForServiceWorker(string extension_id,
url.mojom.Url worker_scope_url,
string event_name);
// Notifies the browser that the given `extension_id` or `listener_url` is no
// longer interested in instances of the named event that satisfy the filter.
// If it has `extension_id` in `listener_owner`, the listener is removed for
// the extension. Otherwise, it has a `listener_url` in `listener_owner` and
// the listener is removed for the URL.
RemoveFilteredListenerForMainThread(
EventListenerOwner listener_owner,
string event_name,
mojo_base.mojom.DictionaryValue filter,
bool remove_lazy_listener);
// Notifies the browser that the given extension is no longer interested in
// instances of the named event that satisfy the filter from an extension
// service worker.
RemoveFilteredListenerForServiceWorker(
string extension_id,
string event_name,
ServiceWorkerContext service_worker_context,
mojo_base.mojom.DictionaryValue filter,
bool remove_lazy_listener);
};