CTTE: More Document references please
[WebKit-https.git] / Source / WebCore / html / HTMLDocument.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  * Copyright (C) 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  */
22
23 #ifndef HTMLDocument_h
24 #define HTMLDocument_h
25
26 #include "CachedResourceClient.h"
27 #include "Document.h"
28 #include <wtf/HashCountedSet.h>
29
30 namespace WebCore {
31
32 class HTMLDocument : public Document, public CachedResourceClient {
33 public:
34     static PassRefPtr<HTMLDocument> create(Frame* frame, const KURL& url)
35     {
36         return adoptRef(new HTMLDocument(frame, url));
37     }
38     virtual ~HTMLDocument();
39
40     int width();
41     int height();
42
43     String dir();
44     void setDir(const String&);
45
46     String designMode() const;
47     void setDesignMode(const String&);
48
49     Element* activeElement();
50     bool hasFocus();
51
52     String bgColor();
53     void setBgColor(const String&);
54     String fgColor();
55     void setFgColor(const String&);
56     String alinkColor();
57     void setAlinkColor(const String&);
58     String linkColor();
59     void setLinkColor(const String&);
60     String vlinkColor();
61     void setVlinkColor(const String&);
62
63     void clear();
64
65     void captureEvents();
66     void releaseEvents();
67
68     Element* documentNamedItem(const AtomicStringImpl* name) const { return m_documentNamedItem.getElementByDocumentNamedItem(name, this); }
69     bool hasDocumentNamedItem(const AtomicStringImpl* name) const { return m_documentNamedItem.contains(name); }
70     bool documentNamedItemContainsMultipleElements(const AtomicStringImpl* name) const { return m_documentNamedItem.containsMultiple(name); }
71     void addDocumentNamedItem(const AtomicString&, Element*);
72     void removeDocumentNamedItem(const AtomicString&, Element*);
73
74     Element* windowNamedItem(const AtomicStringImpl* name) const { return m_windowNamedItem.getElementByWindowNamedItem(name, this); }
75     bool hasWindowNamedItem(const AtomicStringImpl* name) const { return m_windowNamedItem.contains(name); }
76     bool windowNamedItemContainsMultipleElements(const AtomicStringImpl* name) const { return m_windowNamedItem.containsMultiple(name); }
77     void addWindowNamedItem(const AtomicString&, Element*);
78     void removeWindowNamedItem(const AtomicString&, Element*);
79
80     static bool isCaseSensitiveAttribute(const QualifiedName&);
81
82 protected:
83     HTMLDocument(Frame*, const KURL&, DocumentClassFlags = 0);
84
85 private:
86     virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
87
88     virtual bool isFrameSet() const;
89     virtual PassRefPtr<DocumentParser> createParser();
90
91     DocumentOrderedMap m_documentNamedItem;
92     DocumentOrderedMap m_windowNamedItem;
93 };
94
95 inline HTMLDocument* toHTMLDocument(Document* document)
96 {
97     ASSERT_WITH_SECURITY_IMPLICATION(!document || document->isHTMLDocument());
98     return static_cast<HTMLDocument*>(document);
99 }
100
101 inline const HTMLDocument* toHTMLDocument(const Document* document)
102 {
103     ASSERT_WITH_SECURITY_IMPLICATION(!document || document->isHTMLDocument());
104     return static_cast<const HTMLDocument*>(document);
105 }
106
107 inline HTMLDocument& toHTMLDocument(Document& document)
108 {
109     ASSERT_WITH_SECURITY_IMPLICATION(document.isHTMLDocument());
110     return static_cast<HTMLDocument&>(document);
111 }
112
113 inline const HTMLDocument& toHTMLDocument(const Document& document)
114 {
115     ASSERT_WITH_SECURITY_IMPLICATION(document.isHTMLDocument());
116     return static_cast<const HTMLDocument&>(document);
117 }
118 // This will catch anyone doing an unnecessary cast.
119 void toHTMLDocument(const HTMLDocument*);
120 void toHTMLDocument(const HTMLDocument&);
121
122 } // namespace WebCore
123
124 #endif // HTMLDocument_h