Remove the Timer parameters from timer callbacks
[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 "EventTarget.h"
34 #include "Timer.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 LoadFontCallback;
50 class ScriptExecutionContext;
51
52 class FontLoader final : public RefCounted<FontLoader>, public ActiveDOMObject, public EventTarget {
53 public:
54     static PassRefPtr<FontLoader> create(Document* document)
55     {
56         return adoptRef<FontLoader>(new FontLoader(document));
57     }
58     virtual ~FontLoader();
59
60     DEFINE_ATTRIBUTE_EVENT_LISTENER(loading);
61     DEFINE_ATTRIBUTE_EVENT_LISTENER(loadingdone);
62     DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart);
63     DEFINE_ATTRIBUTE_EVENT_LISTENER(load);
64     DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
65
66     bool checkFont(const String&, const String&);
67     void loadFont(const Dictionary&);
68     void loadFontDone(const LoadFontCallback&);
69
70     void notifyWhenFontsReady(PassRefPtr<VoidCallback>);
71
72     bool loading() const { return m_numLoadingFromCSS > 0 || m_numLoadingFromJS > 0; }
73
74     virtual ScriptExecutionContext* scriptExecutionContext() const override;
75     virtual EventTargetInterface eventTargetInterface() const override;
76
77     using RefCounted<FontLoader>::ref;
78     using RefCounted<FontLoader>::deref;
79
80     Document* document() const { return m_document; }
81
82     void didLayout();
83     void beginFontLoading(CSSFontFaceRule*);
84     void fontLoaded(CSSFontFaceRule*);
85     void loadError(CSSFontFaceRule*, CSSFontFaceSource*);
86     void loadingDone();
87
88     virtual bool canSuspend() const override { return !m_numLoadingFromCSS && !m_numLoadingFromJS; }
89
90 private:
91     FontLoader(Document*);
92
93     virtual void refEventTarget() override { ref(); }
94     virtual void derefEventTarget() override { deref(); }
95     virtual EventTargetData* eventTargetData() override;
96     virtual EventTargetData& ensureEventTargetData() override;
97
98     void pendingEventsTimerFired() { firePendingEvents(); }
99     void scheduleEvent(PassRefPtr<Event>);
100     void firePendingEvents();
101     bool resolveFontStyle(const String&, Font&);
102
103     Document* m_document;
104     EventTargetData m_eventTargetData;
105     unsigned m_numLoadingFromCSS;
106     unsigned m_numLoadingFromJS;
107     Vector<RefPtr<Event>> m_pendingEvents;
108     Vector<RefPtr<VoidCallback>> m_callbacks;
109     RefPtr<Event> m_loadingDoneEvent;
110     Timer m_pendingEventsTimer;
111 };
112
113 } // namespace WebCore
114
115 #endif // FontLoader_h
116 #endif // ENABLE(FONT_LOAD_EVENTS)