NetworkCaptureManager.h [plain text]
#pragma once
#if ENABLE(NETWORK_CAPTURE)
#include <WebCore/FileHandle.h>
#include <WebCore/FileSystem.h>
#include <WebCore/URLParser.h>
#include <wtf/Function.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class ResourceRequest;
}
namespace WebKit {
namespace NetworkCapture {
class Resource;
class Manager {
WTF_MAKE_NONCOPYABLE(Manager);
friend class WTF::NeverDestroyed<Manager>;
public:
enum RecordReplayMode {
Disabled,
Record,
Replay
};
static Manager& singleton();
void initialize(const String& recordReplayMode, const String& recordReplayCacheLocation);
void terminate();
bool isRecording() const { return mode() == RecordReplayMode::Record; }
bool isReplaying() const { return mode() == RecordReplayMode::Replay; }
RecordReplayMode mode() const { return m_recordReplayMode; }
Resource* findMatch(const WebCore::ResourceRequest&);
void logRecordedResource(const WebCore::ResourceRequest&);
void logLoadedResource(Resource&);
void logPlayedBackResource(const WebCore::ResourceRequest&, bool wasCacheMiss);
WebCore::FileHandle openCacheFile(const String&, WebCore::FileOpenMode);
String requestToPath(const WebCore::ResourceRequest&);
private:
Manager() = default;
~Manager() = delete;
Resource* findExactMatch(const WebCore::ResourceRequest&);
Resource* findBestFuzzyMatch(const WebCore::ResourceRequest&);
int fuzzyMatchURLs(const WebCore::URL& requestURL, const WebCore::URLParser::URLEncodedForm& requestParameters, const WebCore::URL& resourceURL, const WebCore::URLParser::URLEncodedForm& resourceParameters);
void loadResources();
String reportLoadPath();
String reportRecordPath();
String reportReplayPath();
String stringToHash(const String&);
String hashToPath(const String& hash);
std::optional<Vector<Vector<String>>> readFile(const String& filePath);
bool getLine(uint8_t const *& p, uint8_t const * const end, Vector<String>& line);
bool getWord(uint8_t const *& p, uint8_t const * const end, String& word);
RecordReplayMode m_recordReplayMode { Disabled };
String m_recordReplayCacheLocation;
WebCore::FileHandle m_loadFileHandle;
WebCore::FileHandle m_recordFileHandle;
WebCore::FileHandle m_replayFileHandle;
Vector<Resource> m_cachedResources;
};
} }
#endif // ENABLE(NETWORK_CAPTURE)