#ifndef HostRecord_h
#define HostRecord_h
#if ENABLE(NETWORK_PROCESS)
#include <WebCore/ResourceLoadPriority.h>
#include <wtf/Deque.h>
#include <wtf/HashSet.h>
#include <wtf/RefCounted.h>
#include <wtf/text/WTFString.h>
namespace WebKit {
class NetworkResourceLoader;
typedef Deque<RefPtr<NetworkResourceLoader>> LoaderQueue;
typedef uint64_t ResourceLoadIdentifier;
class HostRecord : public RefCounted<HostRecord> {
public:
static PassRefPtr<HostRecord> create(const String& name, int maxRequestsInFlight)
{
return adoptRef(new HostRecord(name, maxRequestsInFlight));
}
~HostRecord();
const String& name() const { return m_name; }
void scheduleResourceLoader(PassRefPtr<NetworkResourceLoader>);
void addLoaderInProgress(NetworkResourceLoader*);
void removeLoader(NetworkResourceLoader*);
bool hasRequests() const;
void servePendingRequests(WebCore::ResourceLoadPriority);
uint64_t pendingRequestCount() const;
uint64_t activeLoadCount() const;
private:
HostRecord(const String& name, int maxRequestsInFlight);
void servePendingRequestsForQueue(LoaderQueue&, WebCore::ResourceLoadPriority);
bool limitsRequests(WebCore::ResourceLoadPriority, NetworkResourceLoader*) const;
LoaderQueue m_loadersPending[WebCore::ResourceLoadPriorityHighest + 1];
LoaderQueue m_syncLoadersPending;
typedef HashSet<RefPtr<NetworkResourceLoader>> NetworkResourceLoaderSet;
NetworkResourceLoaderSet m_loadersInProgress;
const String m_name;
int m_maxRequestsInFlight;
};
}
#endif // ENABLE(NETWORK_PROCESS)
#endif // #ifndef HostRecord_h