// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// WARNING:
//   This file contains documentation that is merged into the real source.
//   Do not make code changes here.

/// An HTML5 Abstract Worker.
abstract class AbstractWorker implements EventTarget {

  /**
   * The valid events associated with an AbstractWorker.
   */
  AbstractWorkerEvents get on;

  /** @domName AbstractWorker.addEventListener */
  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);

  /** @domName AbstractWorker.dispatchEvent */
  bool $dom_dispatchEvent(Event evt);

  /** @domName AbstractWorker.removeEventListener */
  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
}

abstract class AbstractWorkerEvents implements Events {

  EventListenerList get error;
}
