/*
 * 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,
] 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, EnabledAtRuntime=LinkPreloadResponsiveImages] attribute DOMString imageSrcset;
    [CEReactions=NotNeeded, Reflect, EnabledAtRuntime=LinkPreloadResponsiveImages] attribute DOMString imageSizes;

    // DOM Level 2 Style
    readonly attribute StyleSheet sheet;

    [PutForwards=value] readonly attribute DOMTokenList relList;

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

