Diff
Modified: trunk/Source/WebCore/ChangeLog (220474 => 220475)
--- trunk/Source/WebCore/ChangeLog 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/ChangeLog 2017-08-09 20:25:57 UTC (rev 220475)
@@ -1,3 +1,54 @@
+2017-08-09 Brady Eidson <beid...@apple.com>
+
+ Teach ScriptExecutionContexts about their SessionID.
+ https://bugs.webkit.org/show_bug.cgi?id=175391
+
+ Reviewed by Andy Estes.
+
+ No new tests (No current change in behavior).
+
+ Turns out that Workers need to know their SessionID for future feature development.
+ So let's teach it to them.
+
+ * dom/ScriptExecutionContext.h: Expose a pure virtual SessionID accessor.
+
+ * dom/Document.cpp:
+ (WebCore::Document::sessionID const):
+ * dom/Document.h:
+
+ * page/SessionID.cpp:
+ (WebCore::SessionID::isolatedCopy const):
+ * page/SessionID.h:
+
+ * workers/DedicatedWorkerGlobalScope.cpp:
+ (WebCore::DedicatedWorkerGlobalScope::create):
+ (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
+ * workers/DedicatedWorkerGlobalScope.h:
+
+ * workers/DedicatedWorkerThread.cpp:
+ (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
+ (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
+ * workers/DedicatedWorkerThread.h:
+
+ * workers/Worker.cpp:
+ (WebCore::Worker::notifyFinished):
+
+ * workers/WorkerGlobalScope.cpp:
+ (WebCore::WorkerGlobalScope::WorkerGlobalScope):
+ * workers/WorkerGlobalScope.h:
+
+ * workers/WorkerGlobalScopeProxy.h:
+
+ * workers/WorkerMessagingProxy.cpp:
+ (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
+ * workers/WorkerMessagingProxy.h:
+
+ * workers/WorkerThread.cpp:
+ (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
+ (WebCore::WorkerThread::WorkerThread):
+ (WebCore::WorkerThread::workerThread):
+ * workers/WorkerThread.h:
+
2017-08-09 Wenson Hsieh <wenson_hs...@apple.com>
[iOS DnD] ENABLE_DRAG_SUPPORT should be turned off for iOS 10 and enabled by default
Modified: trunk/Source/WebCore/dom/Document.cpp (220474 => 220475)
--- trunk/Source/WebCore/dom/Document.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/dom/Document.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -4686,6 +4686,12 @@
return completeURL(url, m_baseURL);
}
+SessionID Document::sessionID() const
+{
+ auto* page = this->page();
+ return page ? page->sessionID() : SessionID();
+}
+
void Document::setPageCacheState(PageCacheState state)
{
if (m_pageCacheState == state)
Modified: trunk/Source/WebCore/dom/Document.h (220474 => 220475)
--- trunk/Source/WebCore/dom/Document.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/dom/Document.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -649,6 +649,7 @@
WEBCORE_EXPORT URL completeURL(const String&) const final;
URL completeURL(const String&, const URL& baseURLOverride) const;
+ SessionID sessionID() const final;
String userAgent(const URL&) const final;
Modified: trunk/Source/WebCore/dom/ScriptExecutionContext.h (220474 => 220475)
--- trunk/Source/WebCore/dom/ScriptExecutionContext.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/dom/ScriptExecutionContext.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -61,6 +61,7 @@
class RejectedPromiseTracker;
class ResourceRequest;
class SecurityOrigin;
+class SessionID;
class SocketProvider;
class URL;
@@ -81,6 +82,7 @@
virtual const URL& url() const = 0;
virtual URL completeURL(const String& url) const = 0;
+ virtual SessionID sessionID() const = 0;
virtual String userAgent(const URL&) const = 0;
Modified: trunk/Source/WebCore/page/SessionID.cpp (220474 => 220475)
--- trunk/Source/WebCore/page/SessionID.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/page/SessionID.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -55,5 +55,9 @@
generationProtectionEnabled = true;
}
+SessionID SessionID::isolatedCopy() const
+{
+ return SessionID { m_sessionID };
+}
} // namespace WebCore
Modified: trunk/Source/WebCore/page/SessionID.h (220474 => 220475)
--- trunk/Source/WebCore/page/SessionID.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/page/SessionID.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -65,6 +65,8 @@
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static bool decode(Decoder&, SessionID&);
+ SessionID isolatedCopy() const;
+
private:
explicit SessionID(uint64_t sessionID)
: m_sessionID(sessionID)
Modified: trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -41,16 +41,16 @@
namespace WebCore {
-Ref<DedicatedWorkerGlobalScope> DedicatedWorkerGlobalScope::create(const URL& url, const String& identifier, const String& userAgent, DedicatedWorkerThread& thread, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
+Ref<DedicatedWorkerGlobalScope> DedicatedWorkerGlobalScope::create(const URL& url, const String& identifier, const String& userAgent, DedicatedWorkerThread& thread, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, SessionID sessionID)
{
- auto context = adoptRef(*new DedicatedWorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider));
+ auto context = adoptRef(*new DedicatedWorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider, sessionID));
if (!shouldBypassMainWorldContentSecurityPolicy)
context->applyContentSecurityPolicyResponseHeaders(contentSecurityPolicyResponseHeaders);
return context;
}
-DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, DedicatedWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
- : WorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider)
+DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, DedicatedWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, SessionID sessionID)
+ : WorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider, sessionID)
{
}
Modified: trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h (220474 => 220475)
--- trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -48,7 +48,7 @@
class DedicatedWorkerGlobalScope final : public WorkerGlobalScope {
public:
- static Ref<DedicatedWorkerGlobalScope> create(const URL&, const String& identifier, const String& userAgent, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
+ static Ref<DedicatedWorkerGlobalScope> create(const URL&, const String& identifier, const String& userAgent, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, SessionID);
virtual ~DedicatedWorkerGlobalScope();
ExceptionOr<void> postMessage(JSC::ExecState&, JSC::JSValue message, Vector<JSC::Strong<JSC::JSObject>>&&);
@@ -58,7 +58,7 @@
private:
using Base = WorkerGlobalScope;
- DedicatedWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, DedicatedWorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
+ DedicatedWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, DedicatedWorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, SessionID);
bool isDedicatedWorkerGlobalScope() const final { return true; }
ExceptionOr<void> importScripts(const Vector<String>& urls) final;
Modified: trunk/Source/WebCore/workers/DedicatedWorkerThread.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/DedicatedWorkerThread.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/DedicatedWorkerThread.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -38,8 +38,8 @@
namespace WebCore {
-DedicatedWorkerThread::DedicatedWorkerThread(const URL& url, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, JSC::RuntimeFlags runtimeFlags)
- : WorkerThread(url, identifier, userAgent, sourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, topOrigin, timeOrigin, connectionProxy, socketProvider, runtimeFlags)
+DedicatedWorkerThread::DedicatedWorkerThread(const URL& url, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, JSC::RuntimeFlags runtimeFlags, SessionID sessionID)
+ : WorkerThread(url, identifier, userAgent, sourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, topOrigin, timeOrigin, connectionProxy, socketProvider, runtimeFlags, sessionID)
, m_workerObjectProxy(workerObjectProxy)
{
}
@@ -48,9 +48,9 @@
{
}
-Ref<WorkerGlobalScope> DedicatedWorkerThread::createWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin)
+Ref<WorkerGlobalScope> DedicatedWorkerThread::createWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, SessionID sessionID)
{
- return DedicatedWorkerGlobalScope::create(url, identifier, userAgent, *this, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, idbConnectionProxy(), socketProvider());
+ return DedicatedWorkerGlobalScope::create(url, identifier, userAgent, *this, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, idbConnectionProxy(), socketProvider(), sessionID);
}
void DedicatedWorkerThread::runEventLoop()
Modified: trunk/Source/WebCore/workers/DedicatedWorkerThread.h (220474 => 220475)
--- trunk/Source/WebCore/workers/DedicatedWorkerThread.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/DedicatedWorkerThread.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -49,11 +49,11 @@
WorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; }
protected:
- Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin) override;
+ Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, SessionID) override;
void runEventLoop() override;
private:
- DedicatedWorkerThread(const URL&, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, JSC::RuntimeFlags);
+ DedicatedWorkerThread(const URL&, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, JSC::RuntimeFlags, SessionID);
WorkerObjectProxy& m_workerObjectProxy;
};
Modified: trunk/Source/WebCore/workers/Worker.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/Worker.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/Worker.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -166,11 +166,14 @@
void Worker::notifyFinished()
{
- if (m_scriptLoader->failed())
+ auto* context = scriptExecutionContext();
+ SessionID sessionID = context ? context->sessionID() : SessionID();
+
+ if (m_scriptLoader->failed() || !sessionID.isValid())
dispatchEvent(Event::create(eventNames().errorEvent, false, true));
else {
const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders = m_contentSecurityPolicyResponseHeaders ? m_contentSecurityPolicyResponseHeaders.value() : scriptExecutionContext()->contentSecurityPolicy()->responseHeaders();
- m_contextProxy.startWorkerGlobalScope(m_scriptLoader->url(), scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_workerCreationTime, m_runtimeFlags);
+ m_contextProxy.startWorkerGlobalScope(m_scriptLoader->url(), scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_workerCreationTime, m_runtimeFlags, sessionID);
InspectorInstrumentation::scriptImported(*scriptExecutionContext(), m_scriptLoader->identifier(), m_scriptLoader->script());
}
m_scriptLoader = nullptr;
Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerGlobalScope.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -52,7 +52,7 @@
namespace WebCore {
-WorkerGlobalScope::WorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, WorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
+WorkerGlobalScope::WorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, WorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, SessionID sessionID)
: m_url(url)
, m_identifier(identifier)
, m_userAgent(userAgent)
@@ -67,6 +67,7 @@
#endif
, m_socketProvider(socketProvider)
, m_performance(Performance::create(*this, timeOrigin))
+ , m_sessionID(sessionID)
{
#if !ENABLE(INDEXED_DATABASE)
UNUSED_PARAM(connectionProxy);
Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.h (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerGlobalScope.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -29,6 +29,7 @@
#include "Base64Utilities.h"
#include "EventTarget.h"
#include "ScriptExecutionContext.h"
+#include "SessionID.h"
#include "Supplementable.h"
#include "URL.h"
#include "WorkerEventQueue.h"
@@ -107,7 +108,7 @@
void removeAllEventListeners() final;
protected:
- WorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, WorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
+ WorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, WorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, SessionID);
void applyContentSecurityPolicyResponseHeaders(const ContentSecurityPolicyResponseHeaders&);
@@ -129,6 +130,7 @@
ScriptExecutionContext* scriptExecutionContext() const final { return const_cast<WorkerGlobalScope*>(this); }
URL completeURL(const String&) const final;
+ SessionID sessionID() const final { return m_sessionID; }
String userAgent(const URL&) const final;
void disableEval(const String& errorMessage) final;
void disableWebAssembly(const String& errorMessage) final;
@@ -179,6 +181,8 @@
RefPtr<Performance> m_performance;
mutable RefPtr<Crypto> m_crypto;
+
+ SessionID m_sessionID;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -38,6 +38,7 @@
namespace WebCore {
class ContentSecurityPolicyResponseHeaders;
+class SessionID;
class URL;
class Worker;
@@ -46,7 +47,7 @@
public:
static WorkerGlobalScopeProxy& create(Worker&);
- virtual void startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags) = 0;
+ virtual void startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags, SessionID) = 0;
virtual void terminateWorkerGlobalScope() = 0;
virtual void postMessageToWorkerGlobalScope(RefPtr<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>) = 0;
virtual bool hasPendingActivity() const = 0;
Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -70,7 +70,7 @@
|| (is<WorkerGlobalScope>(*m_scriptExecutionContext) && currentThread() == downcast<WorkerGlobalScope>(*m_scriptExecutionContext).thread().threadID()));
}
-void WorkerMessagingProxy::startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags runtimeFlags)
+void WorkerMessagingProxy::startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags runtimeFlags, SessionID sessionID)
{
// FIXME: This need to be revisited when we support nested worker one day
ASSERT(m_scriptExecutionContext);
@@ -86,7 +86,7 @@
SocketProvider* socketProvider = document.socketProvider();
- auto thread = DedicatedWorkerThread::create(scriptURL, identifier, userAgent, sourceCode, *this, *this, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, document.topOrigin(), timeOrigin, proxy, socketProvider, runtimeFlags);
+ auto thread = DedicatedWorkerThread::create(scriptURL, identifier, userAgent, sourceCode, *this, *this, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, document.topOrigin(), timeOrigin, proxy, socketProvider, runtimeFlags, sessionID);
workerThreadCreated(thread.get());
thread->start();
Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.h (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerMessagingProxy.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -45,7 +45,7 @@
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 startWorkerGlobalScope(const URL& scriptURL, const String& userAgent, const String& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, MonotonicTime timeOrigin, JSC::RuntimeFlags, SessionID) final;
void terminateWorkerGlobalScope() final;
void postMessageToWorkerGlobalScope(RefPtr<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>) final;
bool hasPendingActivity() const final;
Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerThread.cpp 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp 2017-08-09 20:25:57 UTC (rev 220475)
@@ -72,7 +72,7 @@
struct WorkerThreadStartupData {
WTF_MAKE_NONCOPYABLE(WorkerThreadStartupData); WTF_MAKE_FAST_ALLOCATED;
public:
- WorkerThreadStartupData(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin);
+ WorkerThreadStartupData(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, SessionID);
URL m_scriptURL;
String m_identifier;
@@ -83,9 +83,10 @@
bool m_shouldBypassMainWorldContentSecurityPolicy;
Ref<SecurityOrigin> m_topOrigin;
MonotonicTime m_timeOrigin;
+ SessionID m_sessionID;
};
-WorkerThreadStartupData::WorkerThreadStartupData(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin)
+WorkerThreadStartupData::WorkerThreadStartupData(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, SessionID sessionID)
: m_scriptURL(scriptURL.isolatedCopy())
, m_identifier(identifier.isolatedCopy())
, m_userAgent(userAgent.isolatedCopy())
@@ -95,14 +96,15 @@
, m_shouldBypassMainWorldContentSecurityPolicy(shouldBypassMainWorldContentSecurityPolicy)
, m_topOrigin(topOrigin.isolatedCopy())
, m_timeOrigin(timeOrigin)
+ , m_sessionID(sessionID.isolatedCopy())
{
}
-WorkerThread::WorkerThread(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, JSC::RuntimeFlags runtimeFlags)
+WorkerThread::WorkerThread(const URL& scriptURL, const String& identifier, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, JSC::RuntimeFlags runtimeFlags, SessionID sessionID)
: m_workerLoaderProxy(workerLoaderProxy)
, m_workerReportingProxy(workerReportingProxy)
, m_runtimeFlags(runtimeFlags)
- , m_startupData(std::make_unique<WorkerThreadStartupData>(scriptURL, identifier, userAgent, sourceCode, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, topOrigin, timeOrigin))
+ , m_startupData(std::make_unique<WorkerThreadStartupData>(scriptURL, identifier, userAgent, sourceCode, startMode, contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, topOrigin, timeOrigin, sessionID))
#if ENABLE(INDEXED_DATABASE)
, m_idbConnectionProxy(connectionProxy)
#endif
@@ -158,7 +160,7 @@
// while WorkerThread::stop() is accessing it. Note that WorkerThread::stop() can
// be called before we've finished creating the WorkerGlobalScope.
LockHolder lock(m_threadCreationAndWorkerGlobalScopeMutex);
- m_workerGlobalScope = createWorkerGlobalScope(m_startupData->m_scriptURL, m_startupData->m_identifier, m_startupData->m_userAgent, m_startupData->m_contentSecurityPolicyResponseHeaders, m_startupData->m_shouldBypassMainWorldContentSecurityPolicy, WTFMove(m_startupData->m_topOrigin), m_startupData->m_timeOrigin);
+ m_workerGlobalScope = createWorkerGlobalScope(m_startupData->m_scriptURL, m_startupData->m_identifier, m_startupData->m_userAgent, m_startupData->m_contentSecurityPolicyResponseHeaders, m_startupData->m_shouldBypassMainWorldContentSecurityPolicy, WTFMove(m_startupData->m_topOrigin), m_startupData->m_timeOrigin, m_startupData->m_sessionID);
scriptController = m_workerGlobalScope->script();
Modified: trunk/Source/WebCore/workers/WorkerThread.h (220474 => 220475)
--- trunk/Source/WebCore/workers/WorkerThread.h 2017-08-09 20:08:01 UTC (rev 220474)
+++ trunk/Source/WebCore/workers/WorkerThread.h 2017-08-09 20:25:57 UTC (rev 220475)
@@ -37,6 +37,7 @@
class URL;
class NotificationClient;
class SecurityOrigin;
+class SessionID;
class SocketProvider;
class WorkerGlobalScope;
class WorkerLoaderProxy;
@@ -80,10 +81,10 @@
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);
+ 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, SessionID);
// 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;
+ virtual Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, SessionID) = 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();