#ifndef PluginStreamWin_H
#define PluginStreamWin_H
#include <winsock2.h>
#include <windows.h>
#include <wtf/HashMap.h>
#include <wtf/Vector.h>
#include "CString.h"
#include "KURL.h"
#include "npfunctions.h"
#include "NetscapePlugInStreamLoader.h"
#include "PlatformString.h"
#include "Shared.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include "StringHash.h"
#include "Timer.h"
namespace WebCore {
class Frame;
class PluginViewWin;
enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
class PluginStreamWin : public Shared<PluginStreamWin>, private NetscapePlugInStreamLoaderClient {
public:
PluginStreamWin(PluginViewWin*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData);
~PluginStreamWin();
void start();
void stop();
void startStream();
void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&);
virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int);
virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&);
virtual void didFinishLoading(NetscapePlugInStreamLoader*);
void sendJavaScriptStream(const KURL& requestURL, const CString& resultString);
void cancelAndDestroyStream(NPReason);
static NPP ownerForStream(NPStream*);
private:
void deliverData();
void destroyStream(NPReason);
void destroyStream();
ResourceRequest m_resourceRequest;
ResourceResponse m_resourceResponse;
Frame* m_frame;
RefPtr<NetscapePlugInStreamLoader> m_loader;
PluginViewWin* m_pluginView;
void* m_notifyData;
bool m_sendNotification;
PluginStreamState m_streamState;
bool m_loadManually;
Timer<PluginStreamWin> m_delayDeliveryTimer;
void delayDeliveryTimerFired(Timer<PluginStreamWin>*);
Vector<char>* m_deliveryData;
HANDLE m_tempFileHandle;
const NPPluginFuncs* m_pluginFuncs;
NPP m_instance;
uint16 m_transferMode;
int32 m_offset;
CString m_headers;
CString m_path;
NPReason m_reason;
NPStream m_stream;
};
}
#endif