| // Copyright 2019 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. | 
 |  | 
 | /** | 
 |  * @param {!Array<!Common.EventTarget.EventDescriptor>} eventList | 
 |  */ | 
 | export function removeEventListeners(eventList) { | 
 |   for (const eventInfo of eventList) { | 
 |     eventInfo.eventTarget.removeEventListener(eventInfo.eventType, eventInfo.listener, eventInfo.thisObject); | 
 |   } | 
 |   // Do not hold references on unused event descriptors. | 
 |   eventList.splice(0); | 
 | } | 
 |  | 
 | /** | 
 |  * @interface | 
 |  */ | 
 | export class EventTarget { | 
 |   /** | 
 |    * @param {symbol} eventType | 
 |    * @param {function(!Common.Event)} listener | 
 |    * @param {!Object=} thisObject | 
 |    * @return {!Common.EventTarget.EventDescriptor} | 
 |    */ | 
 |   addEventListener(eventType, listener, thisObject) { | 
 |   } | 
 |  | 
 |   /** | 
 |    * @param {symbol} eventType | 
 |    * @return {!Promise<*>} | 
 |    */ | 
 |   once(eventType) { | 
 |   } | 
 |  | 
 |   /** | 
 |    * @param {string|symbol} eventType | 
 |    * @param {function(!Common.Event)} listener | 
 |    * @param {!Object=} thisObject | 
 |    */ | 
 |   removeEventListener(eventType, listener, thisObject) { | 
 |   } | 
 |  | 
 |   /** | 
 |    * @param {symbol} eventType | 
 |    * @return {boolean} | 
 |    */ | 
 |   hasEventListeners(eventType) { | 
 |   } | 
 |  | 
 |   /** | 
 |    * @param {symbol} eventType | 
 |    * @param {*=} eventData | 
 |    */ | 
 |   dispatchEventToListeners(eventType, eventData) { | 
 |   } | 
 | } | 
 |  | 
 | EventTarget.removeEventListeners = removeEventListeners; |