diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/workers/WorkerMessagingProxy.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/workers/WorkerMessagingProxy.h')
-rw-r--r-- | Source/WebCore/workers/WorkerMessagingProxy.h | 154 |
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 |