/*
 * Copyright 2015 Google Inc. 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/html5/dom.html#the-document-object

[OverrideBuiltins]
partial /*sealed*/ interface Document {
  [PutForwards=href, Unforgeable] readonly attribute Location? location;
  // body attribute is changed, from the spec's:
  //   attribute HTMLElement? body;
  // This is because we don't support frameset element, body has to be an
  // HTMLBodyElement.
  attribute HTMLBodyElement? body;
  readonly attribute HTMLHeadElement? head;
  readonly attribute DOMString title;
  readonly attribute Element? activeElement;

  [LenientThis] attribute EventHandler onreadystatechange;
};

// TODO: The IDL defines EventHandler as a nullable callback
// function. Define it as a nullable EventListener for now until we can do
// some refactoring to accept both in the EventTarget implementation.
typedef EventListener? EventHandler;
