// Copyright 2015 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://www.w3.org/TR/dom/#eventlistener

callback interface EventListener {
  // TODO: Because the EventHandler type is typedef'd as a nullable
  // EventListener, we need to allow the return of a boolean value. The value
  // of this will only be checked if the EventListener was added as an
  // attribute (not through addEventListener).
  boolean? handleEvent(Event event);
};
