WebWorkerClientImpl.h [plain text]
#ifndef WebWorkerClientImpl_h
#define WebWorkerClientImpl_h
#if ENABLE(WORKERS)
#include "../public/WebWorkerClient.h"
#include "WorkerContextProxy.h"
#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class ScriptExecutionContext;
}
namespace WebKit {
class WebWorker;
class WebWorkerClientImpl : public WebCore::WorkerContextProxy
, public WebWorkerClient {
public:
WebWorkerClientImpl(WebCore::Worker*);
static WebCore::WorkerContextProxy* createWorkerContextProxy(WebCore::Worker*);
void setWebWorker(WebWorker*);
virtual void startWorkerContext(const WebCore::KURL&,
const WebCore::String&,
const WebCore::String&);
virtual void terminateWorkerContext();
virtual void postMessageToWorkerContext(
PassRefPtr<WebCore::SerializedScriptValue> message,
PassOwnPtr<WebCore::MessagePortChannelArray> channels);
virtual bool hasPendingActivity() const;
virtual void workerObjectDestroyed();
virtual void postMessageToWorkerObject(const WebString&, const WebMessagePortChannelArray&);
virtual void postExceptionToWorkerObject(const WebString&, int, const WebString&);
virtual void postConsoleMessageToWorkerObject(int, int, int, int, const WebString&, int, const WebString&);
virtual void postConsoleMessageToWorkerObject(int, int, int, const WebString&, int, const WebString&);
virtual void confirmMessageFromWorkerObject(bool);
virtual void reportPendingActivity(bool);
virtual void workerContextClosed();
virtual void workerContextDestroyed();
virtual WebWorker* createWorker(WebWorkerClient*) { return 0; }
virtual WebNotificationPresenter* notificationPresenter()
{
return 0;
}
virtual WebApplicationCacheHost* createApplicationCacheHost(WebApplicationCacheHostClient*) { return 0; }
private:
virtual ~WebWorkerClientImpl();
static void startWorkerContextTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
const WebCore::String& scriptURL,
const WebCore::String& userAgent,
const WebCore::String& sourceCode);
static void terminateWorkerContextTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr);
static void postMessageToWorkerContextTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
const WebCore::String& message,
PassOwnPtr<WebCore::MessagePortChannelArray> channels);
static void workerObjectDestroyedTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr);
static void postMessageToWorkerObjectTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
const WebCore::String& message,
PassOwnPtr<WebCore::MessagePortChannelArray> channels);
static void postExceptionToWorkerObjectTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
const WebCore::String& message,
int lineNumber,
const WebCore::String& sourceURL);
static void postConsoleMessageToWorkerObjectTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
int sourceId,
int messageType,
int messageLevel,
const WebCore::String& message,
int lineNumber,
const WebCore::String& sourceURL);
static void confirmMessageFromWorkerObjectTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr);
static void reportPendingActivityTask(WebCore::ScriptExecutionContext* context,
WebWorkerClientImpl* thisPtr,
bool hasPendingActivity);
RefPtr<WebCore::ScriptExecutionContext> m_scriptExecutionContext;
WebCore::Worker* m_worker;
WebWorker* m_webWorker;
bool m_askedToTerminate;
unsigned m_unconfirmedMessageCount;
bool m_workerContextHadPendingActivity;
ThreadIdentifier m_workerThreadId;
};
}
#endif // ENABLE(WORKERS)
#endif