// Copyright 2022 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// https://w3c.github.io/ServiceWorker/#clients-interface

[Exposed = ServiceWorker] interface Clients {
  // The objects returned will be new instances every time
  Promise<any> get(DOMString id);
  // b/218506730: Support for optional dictionaries.
  Promise<sequence<Client>> matchAll();
  Promise<sequence<Client>> matchAll(ClientQueryOptions options);
  Promise<void> claim();
};
