/*
 * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 * Copyright (C) 2011 Google 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.
 */

[
    ExportMacro=WEBCORE_EXPORT,
    JSGenerateToNativeObject,
    Exposed=Window
] interface HTMLLinkElement : HTMLElement {
    [Reflect] attribute boolean disabled;
    [CEReactions=NotNeeded, Reflect] attribute DOMString charset;
    [CEReactions=NotNeeded, Reflect, URL] attribute USVString href;
    [CEReactions=NotNeeded, Reflect] attribute DOMString hreflang;
    [CEReactions=NotNeeded, Reflect] attribute DOMString media;
    [CEReactions=NotNeeded, Reflect] attribute DOMString rel;
    [CEReactions=NotNeeded, Reflect] attribute DOMString rev;
    [PutForwards=value] readonly attribute DOMTokenList sizes;
    [CEReactions=NotNeeded, Reflect] attribute DOMString target;
    [CEReactions=NotNeeded, Reflect] attribute DOMString type;
    [CEReactions=NotNeeded] attribute DOMString as;
    [CEReactions=NotNeeded] attribute DOMString? crossOrigin;
    [CEReactions=NotNeeded, Reflect, EnabledBySetting=LinkPreloadResponsiveImagesEnabled] attribute DOMString imageSrcset;
    [CEReactions=NotNeeded, Reflect, EnabledBySetting=LinkPreloadResponsiveImagesEnabled] attribute DOMString imageSizes;
    [EnabledBySetting=ReferrerPolicyAttributeEnabled, ImplementedAs=referrerPolicyForBindings, CEReactions=NotNeeded] attribute DOMString referrerPolicy;

    // DOM Level 2 Style
    readonly attribute StyleSheet sheet;

    [PutForwards=value] readonly attribute DOMTokenList relList;

    [Reflect] attribute DOMString nonce;
    [CEReactions=NotNeeded, Reflect, EnabledBySetting=SubresourceIntegrityEnabled] attribute DOMString integrity;
};

