CustomProtocolManager.h [plain text]
#ifndef CustomProtocolManager_h
#define CustomProtocolManager_h
#if ENABLE(CUSTOM_PROTOCOLS)
#include "Connection.h"
#include "NetworkProcessSupplement.h"
#include "WebProcessSupplement.h"
#include "WorkQueue.h"
#include <wtf/text/WTFString.h>
#if PLATFORM(COCOA)
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/RetainPtr.h>
#include <wtf/Threading.h>
OBJC_CLASS WKCustomProtocol;
#else
#include "CustomProtocolManagerImpl.h"
#endif
namespace IPC {
class DataReference;
}
namespace WebCore {
class ResourceError;
class ResourceResponse;
}
namespace WebKit {
class ChildProcess;
struct NetworkProcessCreationParameters;
class CustomProtocolManager : public WebProcessSupplement, public NetworkProcessSupplement, public IPC::Connection::WorkQueueMessageReceiver {
WTF_MAKE_NONCOPYABLE(CustomProtocolManager);
public:
explicit CustomProtocolManager(ChildProcess*);
static const char* supplementName();
ChildProcess* childProcess() const { return m_childProcess; }
void registerScheme(const String&);
void unregisterScheme(const String&);
bool supportsScheme(const String&);
#if PLATFORM(COCOA)
void addCustomProtocol(WKCustomProtocol *);
void removeCustomProtocol(WKCustomProtocol *);
#endif
private:
void initializeConnection(IPC::Connection*) override;
void initialize(const WebProcessCreationParameters&) override;
#if ENABLE(NETWORK_PROCESS)
void initialize(const NetworkProcessCreationParameters&) override;
#endif
virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;
void didFailWithError(uint64_t customProtocolID, const WebCore::ResourceError&);
void didLoadData(uint64_t customProtocolID, const IPC::DataReference&);
void didReceiveResponse(uint64_t customProtocolID, const WebCore::ResourceResponse&, uint32_t cacheStoragePolicy);
void didFinishLoading(uint64_t customProtocolID);
ChildProcess* m_childProcess;
RefPtr<WorkQueue> m_messageQueue;
#if PLATFORM(COCOA)
HashSet<String> m_registeredSchemes;
Mutex m_registeredSchemesMutex;
typedef HashMap<uint64_t, RetainPtr<WKCustomProtocol>> CustomProtocolMap;
CustomProtocolMap m_customProtocolMap;
Mutex m_customProtocolMapMutex;
RetainPtr<WKCustomProtocol> protocolForID(uint64_t customProtocolID);
#else
std::unique_ptr<CustomProtocolManagerImpl> m_impl;
#endif
};
}
#endif // ENABLE(CUSTOM_PROTOCOLS)
#endif // CustomProtocolManager_h