summaryrefslogtreecommitdiff
path: root/Source/WebCore/workers/WorkerMessagingProxy.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/workers/WorkerMessagingProxy.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/workers/WorkerMessagingProxy.h')
-rw-r--r--Source/WebCore/workers/WorkerMessagingProxy.h154
1 files changed, 62 insertions, 92 deletions
diff --git a/Source/WebCore/workers/WorkerMessagingProxy.h b/Source/WebCore/workers/WorkerMessagingProxy.h
index bf607f582..8fd3cd6a3 100644
--- a/Source/WebCore/workers/WorkerMessagingProxy.h
+++ b/Source/WebCore/workers/WorkerMessagingProxy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008-2017 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -21,103 +21,73 @@
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
*/
-#ifndef WorkerMessagingProxy_h
-#define WorkerMessagingProxy_h
+#pragma once
-#include "ScriptExecutionContext.h"
#include "WorkerGlobalScopeProxy.h"
#include "WorkerLoaderProxy.h"
#include "WorkerObjectProxy.h"
-#include <wtf/Forward.h>
-#include <wtf/Noncopyable.h>
-#include <wtf/PassOwnPtr.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
+#include <wtf/ThreadSafeRefCounted.h>
namespace WebCore {
- class DedicatedWorkerThread;
- class ScriptExecutionContext;
- class Worker;
-
- class WorkerMessagingProxy : public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy {
- WTF_MAKE_NONCOPYABLE(WorkerMessagingProxy); WTF_MAKE_FAST_ALLOCATED;
- public:
- explicit WorkerMessagingProxy(Worker*);
-
- // Implementations of WorkerGlobalScopeProxy.
- // (Only use these methods in the worker object thread.)
- virtual void startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode) override;
- virtual void terminateWorkerGlobalScope() override;
- virtual void postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>) override;
- virtual bool hasPendingActivity() const override;
- virtual void workerObjectDestroyed() override;
- virtual void notifyNetworkStateChange(bool isOnline) override;
-#if ENABLE(INSPECTOR)
- virtual void connectToInspector(WorkerGlobalScopeProxy::PageInspector*) override;
- virtual void disconnectFromInspector() override;
- virtual void sendMessageToInspector(const String&) override;
-#endif
-
- // Implementations of WorkerObjectProxy.
- // (Only use these methods in the worker context thread.)
- virtual void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>) override;
- virtual void postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) override;
- virtual void postConsoleMessageToWorkerObject(MessageSource, MessageLevel, const String& message, int lineNumber, int columnNumber, const String& sourceURL) override;
-#if ENABLE(INSPECTOR)
- virtual void postMessageToPageInspector(const String&) override;
-#endif
- virtual void confirmMessageFromWorkerObject(bool hasPendingActivity) override;
- virtual void reportPendingActivity(bool hasPendingActivity) override;
- virtual void workerGlobalScopeClosed() override;
- virtual void workerGlobalScopeDestroyed() override;
-
- // Implementation of WorkerLoaderProxy.
- // These methods are called on different threads to schedule loading
- // requests and to send callbacks back to WorkerGlobalScope.
- virtual void postTaskToLoader(PassOwnPtr<ScriptExecutionContext::Task>) override;
- virtual bool postTaskForModeToWorkerGlobalScope(PassOwnPtr<ScriptExecutionContext::Task>, const String& mode) override;
-
- void workerThreadCreated(PassRefPtr<DedicatedWorkerThread>);
-
- // Only use this method on the worker object thread.
- bool askedToTerminate() const { return m_askedToTerminate; }
-
- protected:
- virtual ~WorkerMessagingProxy();
-
- private:
- friend class MessageWorkerTask;
- friend class PostMessageToPageInspectorTask;
- friend class WorkerGlobalScopeDestroyedTask;
- friend class WorkerExceptionTask;
- friend class WorkerThreadActivityReportTask;
-
- void workerGlobalScopeDestroyedInternal();
- static void workerObjectDestroyedInternal(ScriptExecutionContext*, WorkerMessagingProxy*);
- void reportPendingActivityInternal(bool confirmingMessage, bool hasPendingActivity);
- Worker* workerObject() const { return m_workerObject; }
-
- RefPtr<ScriptExecutionContext> m_scriptExecutionContext;
- Worker* m_workerObject;
- bool m_mayBeDestroyed;
- RefPtr<DedicatedWorkerThread> m_workerThread;
-
- unsigned m_unconfirmedMessageCount; // Unconfirmed messages from worker object to worker thread.
- bool m_workerThreadHadPendingActivity; // The latest confirmation from worker thread reported that it was still active.
-
- bool m_askedToTerminate;
-
- Vector<OwnPtr<ScriptExecutionContext::Task>> m_queuedEarlyTasks; // Tasks are queued here until there's a thread object created.
-#if ENABLE(INSPECTOR)
- WorkerGlobalScopeProxy::PageInspector* m_pageInspector;
-#endif
- };
+class DedicatedWorkerThread;
+class WorkerInspectorProxy;
+
+class WorkerMessagingProxy final : public ThreadSafeRefCounted<WorkerMessagingProxy>, public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy {
+ WTF_MAKE_FAST_ALLOCATED;
+public:
+ explicit WorkerMessagingProxy(Worker&);
+ virtual ~WorkerMessagingProxy();
+
+private:
+ // Implementations of WorkerGlobalScopeProxy.
+ // (Only use these functions in the worker object thread.)
+ void startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags) final;
+ void terminateWorkerGlobalScope() final;
+ void postMessageToWorkerGlobalScope(RefPtr<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>) final;
+ bool hasPendingActivity() const final;
+ void workerObjectDestroyed() final;
+ void notifyNetworkStateChange(bool isOnline) final;
+
+ // Implementations of WorkerObjectProxy.
+ // (Only use these functions in the worker context thread.)
+ void postMessageToWorkerObject(RefPtr<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>) final;
+ void postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) final;
+ void postMessageToPageInspector(const String&) final;
+ void confirmMessageFromWorkerObject(bool hasPendingActivity) final;
+ void reportPendingActivity(bool hasPendingActivity) final;
+ void workerGlobalScopeClosed() final;
+ void workerGlobalScopeDestroyed() final;
+
+ // Implementation of WorkerLoaderProxy.
+ // These functions are called on different threads to schedule loading
+ // requests and to send callbacks back to WorkerGlobalScope.
+ void postTaskToLoader(ScriptExecutionContext::Task&&) final;
+ bool postTaskForModeToWorkerGlobalScope(ScriptExecutionContext::Task&&, const String& mode) final;
+
+ void workerThreadCreated(DedicatedWorkerThread&);
+
+ // Only use this method on the worker object thread.
+ bool askedToTerminate() const { return m_askedToTerminate; }
+
+ void workerGlobalScopeDestroyedInternal();
+ void reportPendingActivityInternal(bool confirmingMessage, bool hasPendingActivity);
+ Worker* workerObject() const { return m_workerObject; }
+
+ RefPtr<ScriptExecutionContext> m_scriptExecutionContext;
+ std::unique_ptr<WorkerInspectorProxy> m_inspectorProxy;
+ Worker* m_workerObject;
+ bool m_mayBeDestroyed { false };
+ RefPtr<DedicatedWorkerThread> m_workerThread;
+
+ unsigned m_unconfirmedMessageCount { 0 }; // Unconfirmed messages from worker object to worker thread.
+ bool m_workerThreadHadPendingActivity { false }; // The latest confirmation from worker thread reported that it was still active.
+
+ bool m_askedToTerminate { false };
+
+ Vector<std::unique_ptr<ScriptExecutionContext::Task>> m_queuedEarlyTasks; // Tasks are queued here until there's a thread object created.
+};
} // namespace WebCore
-
-#endif // WorkerMessagingProxy_h