176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)// found in the LICENSE file.
476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#ifndef InspectorResourceContentLoader_h
676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#define InspectorResourceContentLoader_h
776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/fetch/ResourcePtr.h"
976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "wtf/HashSet.h"
1076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "wtf/Noncopyable.h"
1176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "wtf/Vector.h"
1276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
1476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
1576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class Page;
1676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class Resource;
1776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)class VoidCallback;
1876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass InspectorResourceContentLoader FINAL : public NoBaseWillBeGarbageCollectedFinalized<InspectorResourceContentLoader> {
2076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    WTF_MAKE_NONCOPYABLE(InspectorResourceContentLoader);
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
2276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)public:
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    explicit InspectorResourceContentLoader(Page*);
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void ensureResourcesContentLoaded(VoidCallback*);
2576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    ~InspectorResourceContentLoader();
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*);
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void dispose();
2876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    bool hasFinished();
2976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    void stop();
3076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
3176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)private:
3276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    class ResourceClient;
3376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
3476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    void resourceFinished(ResourceClient*);
3576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    void checkDone();
36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void start();
3776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PersistentHeapVectorWillBeHeapVector<Member<VoidCallback> > m_callbacks;
3976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    bool m_allRequestsStarted;
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool m_started;
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<Page> m_page;
4276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    HashSet<ResourceClient*> m_pendingResourceClients;
4376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    Vector<ResourcePtr<Resource> > m_resources;
4476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
4576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    friend class ResourceClient;
4676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)};
4776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
4976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
5076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
5176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#endif // !defined(InspectorResourceContentLoader_h)
52