1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef InspectorResourceContentLoader_h
6#define InspectorResourceContentLoader_h
7
8#include "core/fetch/ResourcePtr.h"
9#include "wtf/HashSet.h"
10#include "wtf/Noncopyable.h"
11#include "wtf/Vector.h"
12
13namespace blink {
14
15class Page;
16class Resource;
17class VoidCallback;
18
19class InspectorResourceContentLoader FINAL : public NoBaseWillBeGarbageCollectedFinalized<InspectorResourceContentLoader> {
20    WTF_MAKE_NONCOPYABLE(InspectorResourceContentLoader);
21    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
22public:
23    explicit InspectorResourceContentLoader(Page*);
24    void ensureResourcesContentLoaded(VoidCallback*);
25    ~InspectorResourceContentLoader();
26    void trace(Visitor*);
27    void dispose();
28    bool hasFinished();
29    void stop();
30
31private:
32    class ResourceClient;
33
34    void resourceFinished(ResourceClient*);
35    void checkDone();
36    void start();
37
38    PersistentHeapVectorWillBeHeapVector<Member<VoidCallback> > m_callbacks;
39    bool m_allRequestsStarted;
40    bool m_started;
41    RawPtrWillBeMember<Page> m_page;
42    HashSet<ResourceClient*> m_pendingResourceClients;
43    Vector<ResourcePtr<Resource> > m_resources;
44
45    friend class ResourceClient;
46};
47
48} // namespace blink
49
50
51#endif // !defined(InspectorResourceContentLoader_h)
52