diff options
Diffstat (limited to 'Source/WebCore/workers/WorkerThread.h')
-rw-r--r-- | Source/WebCore/workers/WorkerThread.h | 130 |
1 files changed, 75 insertions, 55 deletions
diff --git a/Source/WebCore/workers/WorkerThread.h b/Source/WebCore/workers/WorkerThread.h index 96d9b07cd..07ad3ce78 100644 --- a/Source/WebCore/workers/WorkerThread.h +++ b/Source/WebCore/workers/WorkerThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2016 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,85 +21,105 @@ * 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 WorkerThread_h -#define WorkerThread_h +#pragma once -#include "ContentSecurityPolicy.h" -#include "GroupSettings.h" #include "WorkerRunLoop.h" +#include <memory> +#include <runtime/RuntimeFlags.h> #include <wtf/Forward.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> namespace WebCore { - class URL; - class NotificationClient; - class SecurityOrigin; - class WorkerGlobalScope; - class WorkerLoaderProxy; - class WorkerReportingProxy; - struct WorkerThreadStartupData; +class ContentSecurityPolicyResponseHeaders; +class URL; +class NotificationClient; +class SecurityOrigin; +class SocketProvider; +class WorkerGlobalScope; +class WorkerLoaderProxy; +class WorkerReportingProxy; + +enum class WorkerThreadStartMode { + Normal, + WaitForInspector, +}; + +namespace IDBClient { +class IDBConnectionProxy; +} - enum WorkerThreadStartMode { DontPauseWorkerGlobalScopeOnStart, PauseWorkerGlobalScopeOnStart }; +struct WorkerThreadStartupData; - class WorkerThread : public RefCounted<WorkerThread> { - public: - virtual ~WorkerThread(); +class WorkerThread : public RefCounted<WorkerThread> { +public: + virtual ~WorkerThread(); - bool start(); - void stop(); + bool start(); + void stop(); - ThreadIdentifier threadID() const { return m_threadID; } - WorkerRunLoop& runLoop() { return m_runLoop; } - WorkerLoaderProxy& workerLoaderProxy() const { return m_workerLoaderProxy; } - WorkerReportingProxy& workerReportingProxy() const { return m_workerReportingProxy; } + ThreadIdentifier threadID() const { return m_threadID; } + WorkerRunLoop& runLoop() { return m_runLoop; } + WorkerLoaderProxy& workerLoaderProxy() const { return m_workerLoaderProxy; } + WorkerReportingProxy& workerReportingProxy() const { return m_workerReportingProxy; } - // Number of active worker threads. - static unsigned workerThreadCount(); - static void releaseFastMallocFreeMemoryInAllThreads(); + // Number of active worker threads. + WEBCORE_EXPORT static unsigned workerThreadCount(); + static void releaseFastMallocFreeMemoryInAllThreads(); #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - NotificationClient* getNotificationClient() { return m_notificationClient; } - void setNotificationClient(NotificationClient* client) { m_notificationClient = client; } + NotificationClient* getNotificationClient() { return m_notificationClient; } + void setNotificationClient(NotificationClient* client) { m_notificationClient = client; } #endif - protected: - WorkerThread(const URL&, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType, const SecurityOrigin* topOrigin); + void startRunningDebuggerTasks(); + void stopRunningDebuggerTasks(); + + JSC::RuntimeFlags runtimeFlags() const { return m_runtimeFlags; } + +protected: + WorkerThread(const URL&, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, JSC::RuntimeFlags); + + // Factory method for creating a new worker context for the thread. + virtual Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin) = 0; - // Factory method for creating a new worker context for the thread. - virtual PassRefPtr<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& userAgent, std::unique_ptr<GroupSettings>, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType, PassRefPtr<SecurityOrigin> topOrigin) = 0; + // Executes the event loop for the worker thread. Derived classes can override to perform actions before/after entering the event loop. + virtual void runEventLoop(); - // Executes the event loop for the worker thread. Derived classes can override to perform actions before/after entering the event loop. - virtual void runEventLoop(); + WorkerGlobalScope* workerGlobalScope() { return m_workerGlobalScope.get(); } - WorkerGlobalScope* workerGlobalScope() { return m_workerGlobalScope.get(); } + IDBClient::IDBConnectionProxy* idbConnectionProxy(); + SocketProvider* socketProvider(); - private: - // Static function executed as the core routine on the new thread. Passed a pointer to a WorkerThread object. - static void workerThreadStart(void*); - void workerThread(); +private: + // Static function executed as the core routine on the new thread. Passed a pointer to a WorkerThread object. + static void workerThreadStart(void*); + void workerThread(); - ThreadIdentifier m_threadID; - WorkerRunLoop m_runLoop; - WorkerLoaderProxy& m_workerLoaderProxy; - WorkerReportingProxy& m_workerReportingProxy; + ThreadIdentifier m_threadID; + WorkerRunLoop m_runLoop; + WorkerLoaderProxy& m_workerLoaderProxy; + WorkerReportingProxy& m_workerReportingProxy; + JSC::RuntimeFlags m_runtimeFlags; + bool m_pausedForDebugger { false }; - RefPtr<WorkerGlobalScope> m_workerGlobalScope; - Mutex m_threadCreationMutex; + RefPtr<WorkerGlobalScope> m_workerGlobalScope; + Lock m_threadCreationMutex; - OwnPtr<WorkerThreadStartupData> m_startupData; + std::unique_ptr<WorkerThreadStartupData> m_startupData; #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - NotificationClient* m_notificationClient; + NotificationClient* m_notificationClient { nullptr }; #endif - }; -} // namespace WebCore - -#endif // WorkerThread_h +#if ENABLE(INDEXED_DATABASE) + RefPtr<IDBClient::IDBConnectionProxy> m_idbConnectionProxy; +#endif +#if ENABLE(WEB_SOCKETS) + RefPtr<SocketProvider> m_socketProvider; +#endif +}; +} // namespace WebCore |