Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / html / HTMLLinkElement.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  * Copyright (C) 2003, 2008, 2010 Apple Inc. All rights reserved.
5  * Copyright (C) 2011 Google Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef HTMLLinkElement_h
25 #define HTMLLinkElement_h
26
27 #include "AttributeDOMTokenList.h"
28 #include "CSSStyleSheet.h"
29 #include "CachedStyleSheetClient.h"
30 #include "CachedResourceHandle.h"
31 #include "HTMLElement.h"
32 #include "LinkLoader.h"
33 #include "LinkLoaderClient.h"
34 #include "LinkRelAttribute.h"
35
36 namespace WebCore {
37
38 class AttributeDOMTokenList;
39 class HTMLLinkElement;
40 class URL;
41
42 template<typename T> class EventSender;
43 typedef EventSender<HTMLLinkElement> LinkEventSender;
44
45 class HTMLLinkElement final : public HTMLElement, public CachedStyleSheetClient, public LinkLoaderClient {
46 public:
47     static Ref<HTMLLinkElement> create(const QualifiedName&, Document&, bool createdByParser);
48     virtual ~HTMLLinkElement();
49
50     URL href() const;
51     const AtomicString& rel() const;
52
53     String target() const override;
54
55     const AtomicString& type() const;
56
57     IconType iconType() const;
58
59     // the icon size string as parsed from the HTML attribute
60     String iconSizes();
61
62     CSSStyleSheet* sheet() const { return m_sheet.get(); }
63
64     bool styleSheetIsLoading() const;
65
66     bool isDisabled() const { return m_disabledState == Disabled; }
67     bool isEnabledViaScript() const { return m_disabledState == EnabledViaScript; }
68     DOMTokenList& sizes();
69
70     void dispatchPendingEvent(LinkEventSender*);
71     static void dispatchPendingLoadEvents();
72
73     DOMTokenList& relList();
74
75 private:
76     void parseAttribute(const QualifiedName&, const AtomicString&) override;
77
78     bool shouldLoadLink() override;
79     void process();
80     static void processCallback(Node*);
81     void clearSheet();
82
83     InsertionNotificationRequest insertedInto(ContainerNode&) override;
84     void removedFrom(ContainerNode&) override;
85
86     // from CachedResourceClient
87     void setCSSStyleSheet(const String& href, const URL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet) override;
88     bool sheetLoaded() override;
89     void notifyLoadedSheetAndAllCriticalSubresources(bool errorOccurred) override;
90     void startLoadingDynamicSheet() override;
91
92     void linkLoaded() override;
93     void linkLoadingErrored() override;
94
95     bool isAlternate() const { return m_disabledState == Unset && m_relAttribute.isAlternate; }
96     
97     void setDisabledState(bool);
98
99     bool isURLAttribute(const Attribute&) const override;
100
101     void defaultEventHandler(Event*) override;
102     void handleClick(Event&);
103
104     HTMLLinkElement(const QualifiedName&, Document&, bool createdByParser);
105
106     void addSubresourceAttributeURLs(ListHashSet<URL>&) const override;
107
108     void finishParsingChildren() override;
109
110     enum PendingSheetType { Unknown, ActiveSheet, InactiveSheet };
111     void addPendingSheet(PendingSheetType);
112
113     enum RemovePendingSheetNotificationType {
114         RemovePendingSheetNotifyImmediately,
115         RemovePendingSheetNotifyLater
116     };
117
118     void removePendingSheet(RemovePendingSheetNotificationType = RemovePendingSheetNotifyImmediately);
119
120     LinkLoader m_linkLoader;
121     CachedResourceHandle<CachedCSSStyleSheet> m_cachedSheet;
122     RefPtr<CSSStyleSheet> m_sheet;
123     enum DisabledState {
124         Unset,
125         EnabledViaScript,
126         Disabled
127     };
128
129     String m_type;
130     String m_media;
131     std::unique_ptr<AttributeDOMTokenList> m_sizes;
132     DisabledState m_disabledState;
133     LinkRelAttribute m_relAttribute;
134     bool m_loading;
135     bool m_createdByParser;
136     bool m_isInShadowTree;
137     bool m_firedLoad;
138     bool m_loadedSheet;
139
140     PendingSheetType m_pendingSheetType;
141
142     std::unique_ptr<AttributeDOMTokenList> m_relList;
143 };
144
145 } //namespace
146
147 #endif