/*
 * Copyright 2014 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/scripting-1.html#the-script-element

interface HTMLScriptElement : HTMLElement {
  attribute DOMString src;
  attribute DOMString type;
  attribute DOMString charset;
  attribute boolean async;
  // From Content Security Policy spec.
  attribute DOMString nonce;

  // This method is deprecated but it is needed to workaround for lack of
  // Promise.
  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;
