1d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)// found in the LICENSE file.
4d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
5d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#ifndef FontLoader_h
6d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#define FontLoader_h
7d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
8d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/fetch/ResourceLoader.h"
9d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/fetch/ResourcePtr.h"
10d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "platform/Timer.h"
11d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "platform/heap/Handle.h"
12d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "wtf/Vector.h"
13d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
15d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
1676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class CSSFontSelector;
17d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class FontResource;
18d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
19d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class FontLoader : public RefCountedWillBeGarbageCollectedFinalized<FontLoader> {
20d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)public:
2176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    static PassRefPtrWillBeRawPtr<FontLoader> create(CSSFontSelector* fontSelector, ResourceFetcher* fetcher)
22d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    {
2376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return adoptRefWillBeNoop(new FontLoader(fontSelector, fetcher));
24d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    }
25d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    ~FontLoader();
26d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
27d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void addFontToBeginLoading(FontResource*);
28d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void loadPendingFonts();
2976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    void fontFaceInvalidated();
30d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN)
3276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    void clearResourceFetcherAndFontSelector();
33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif
34d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
35d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void trace(Visitor*);
36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)private:
3876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    FontLoader(CSSFontSelector*, ResourceFetcher*);
39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void beginLoadTimerFired(Timer<FontLoader>*);
40e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    void clearPendingFonts();
41d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
42d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Timer<FontLoader> m_beginLoadingTimer;
43d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
44d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    typedef Vector<std::pair<ResourcePtr<FontResource>, ResourceLoader::RequestCountTracker> > FontsToLoadVector;
45d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FontsToLoadVector m_fontsToBeginLoading;
4676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RawPtrWillBeMember<CSSFontSelector> m_fontSelector;
47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    RawPtrWillBeWeakMember<ResourceFetcher> m_resourceFetcher;
48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)};
49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
51d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif // FontLoader_h
53