Make some things that return never-null pointers return references instead.
[WebKit-https.git] / Source / WebCore / css / FontLoader.h
1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
23  * DAMAGE.
24  */
25
26 #if ENABLE(FONT_LOAD_EVENTS)
27
28 #ifndef FontLoader_h
29 #define FontLoader_h
30
31 #include "ActiveDOMObject.h"
32 #include "EventListener.h"
33 #include "EventNames.h"
34 #include "EventTarget.h"
35 #include "VoidCallback.h"
36 #include <wtf/PassRefPtr.h>
37 #include <wtf/RefCounted.h>
38 #include <wtf/Vector.h>
39
40 namespace WebCore {
41
42 class CachedFont;
43 class CSSFontFaceRule;
44 class CSSFontFaceSource;
45 class Dictionary;
46 class Document;
47 class Event;
48 class Font;
49 class ScriptExecutionContext;
50
51 class FontLoader : public RefCounted<FontLoader>, public ActiveDOMObject, public EventTarget {
52 public:
53     static PassRefPtr<FontLoader> create(Document* document)
54     {
55         return adoptRef<FontLoader>(new FontLoader(document));
56     }
57     virtual ~FontLoader();
58
59     DEFINE_ATTRIBUTE_EVENT_LISTENER(loading);
60     DEFINE_ATTRIBUTE_EVENT_LISTENER(loadingdone);
61     DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart);
62     DEFINE_ATTRIBUTE_EVENT_LISTENER(load);
63     DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
64
65     bool checkFont(const String&, const String&);
66     void loadFont(const Dictionary&);
67     void notifyWhenFontsReady(PassRefPtr<VoidCallback>);
68
69     bool loading() const { return m_loadingCount > 0; }
70
71     virtual ScriptExecutionContext* scriptExecutionContext() const;
72     virtual const AtomicString& interfaceName() const;
73
74     using RefCounted<FontLoader>::ref;
75     using RefCounted<FontLoader>::deref;
76
77     Document* document() const { return m_document; }
78
79     void didLayout();
80     void beginFontLoading(CSSFontFaceRule*);
81     void fontLoaded(CSSFontFaceRule*);
82     void loadError(CSSFontFaceRule*, CSSFontFaceSource*);
83     void loadingDone();
84
85 private:
86     FontLoader(Document*);
87
88     virtual void refEventTarget() OVERRIDE { ref(); }
89     virtual void derefEventTarget() OVERRIDE { deref(); }
90     virtual EventTargetData* eventTargetData() OVERRIDE;
91     virtual EventTargetData& ensureEventTargetData() OVERRIDE;
92
93     void scheduleEvent(PassRefPtr<Event>);
94     void firePendingEvents();
95     bool resolveFontStyle(const String&, Font&);
96
97     Document* m_document;
98     EventTargetData m_eventTargetData;
99     unsigned m_loadingCount;
100     Vector<RefPtr<Event> > m_pendingEvents;
101     Vector<RefPtr<VoidCallback> > m_callbacks;
102     RefPtr<Event> m_loadingDoneEvent;
103 };
104
105 } // namespace WebCore
106
107 #endif // FontLoader_h
108 #endif // ENABLE(FONT_LOAD_EVENTS)