/*
 * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

// https://html.spec.whatwg.org/C/#the-script-element
[
    Exposed=Window,
    HTMLConstructor
] interface HTMLScriptElement : HTMLElement {
    [CEReactions, Reflect, URL, RaisesException=Setter] attribute ScriptURLString src;
    [CEReactions, Reflect] attribute DOMString type;
    [CEReactions, Reflect] attribute boolean noModule;
    [CEReactions, Reflect] attribute DOMString charset;
    [CEReactions] attribute boolean async;
    [CEReactions, Reflect] attribute boolean defer;
    [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
    [CEReactions] attribute ScriptString text;
    [CEReactions, Reflect, ReflectOnly=("", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin", "unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString? referrerPolicy;
    [CEReactions, MeasureAs=PriorityHints, Reflect, ReflectOnly=("low", "auto", "high"), ReflectMissing="auto", ReflectInvalid="auto"] attribute DOMString fetchPriority;

    // obsolete members
    // https://html.spec.whatwg.org/C/#HTMLScriptElement-partial
    // TODO(foolip): The event and htmlFor attributes should return the empty
    // string on getting, and do nothing on setting.
    [CEReactions, Reflect] attribute DOMString event;
    [CEReactions, Reflect=for] attribute DOMString htmlFor;

    // Subresource Integrity
    // https://w3c.github.io/webappsec-subresource-integrity/#HTMLScriptElement
    [Reflect] attribute DOMString integrity;

    // https://html.spec.whatwg.org/multipage/scripting.html#dom-script-supports
    [Measure] static boolean supports(DOMString type);

    // https://html.spec.whatwg.org/multipage/scripting.html#dom-script-blocking
    [SameObject, PutForwards=value] readonly attribute DOMTokenList blocking;
};

// https://wicg.github.io/attribution-reporting-api
HTMLScriptElement includes HTMLAttributionSrcElementUtils;
