summaryrefslogtreecommitdiff
path: root/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp')
-rw-r--r--Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp48
1 files changed, 25 insertions, 23 deletions
diff --git a/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp b/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp
index 701569f15..cb9b634d0 100644
--- a/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp
+++ b/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 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 are
@@ -31,6 +32,7 @@
#include "config.h"
#include "DedicatedWorkerGlobalScope.h"
+#include "ContentSecurityPolicyResponseHeaders.h"
#include "DOMWindow.h"
#include "DedicatedWorkerThread.h"
#include "MessageEvent.h"
@@ -39,15 +41,16 @@
namespace WebCore {
-PassRefPtr<DedicatedWorkerGlobalScope> DedicatedWorkerGlobalScope::create(const URL& url, const String& userAgent, std::unique_ptr<GroupSettings> settings, DedicatedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType, PassRefPtr<SecurityOrigin> topOrigin)
+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)
{
- RefPtr<DedicatedWorkerGlobalScope> context = adoptRef(new DedicatedWorkerGlobalScope(url, userAgent, std::move(settings), thread, topOrigin));
- context->applyContentSecurityPolicyFromString(contentSecurityPolicy, contentSecurityPolicyType);
- return context.release();
+ auto context = adoptRef(*new DedicatedWorkerGlobalScope(url, identifier, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider));
+ if (!shouldBypassMainWorldContentSecurityPolicy)
+ context->applyContentSecurityPolicyResponseHeaders(contentSecurityPolicyResponseHeaders);
+ return context;
}
-DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const URL& url, const String& userAgent, std::unique_ptr<GroupSettings> settings, DedicatedWorkerThread* thread, PassRefPtr<SecurityOrigin> topOrigin)
- : WorkerGlobalScope(url, userAgent, std::move(settings), thread, topOrigin)
+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)
{
}
@@ -60,32 +63,31 @@ EventTargetInterface DedicatedWorkerGlobalScope::eventTargetInterface() const
return DedicatedWorkerGlobalScopeEventTargetInterfaceType;
}
-void DedicatedWorkerGlobalScope::postMessage(PassRefPtr<SerializedScriptValue> message, MessagePort* port, ExceptionCode& ec)
+ExceptionOr<void> DedicatedWorkerGlobalScope::postMessage(JSC::ExecState& state, JSC::JSValue messageValue, Vector<JSC::Strong<JSC::JSObject>>&& transfer)
{
- MessagePortArray ports;
- if (port)
- ports.append(port);
- postMessage(message, &ports, ec);
-}
+ Vector<RefPtr<MessagePort>> ports;
+ auto message = SerializedScriptValue::create(state, messageValue, WTFMove(transfer), ports, SerializationContext::WorkerPostMessage);
+ if (message.hasException())
+ return message.releaseException();
-void DedicatedWorkerGlobalScope::postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray* ports, ExceptionCode& ec)
-{
// Disentangle the port in preparation for sending it to the remote context.
- OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(ports, ec);
- if (ec)
- return;
- thread()->workerObjectProxy().postMessageToWorkerObject(message, channels.release());
+ auto channels = MessagePort::disentanglePorts(WTFMove(ports));
+ if (channels.hasException())
+ return channels.releaseException();
+ thread().workerObjectProxy().postMessageToWorkerObject(message.releaseReturnValue(), channels.releaseReturnValue());
+ return { };
}
-void DedicatedWorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionCode& ec)
+ExceptionOr<void> DedicatedWorkerGlobalScope::importScripts(const Vector<String>& urls)
{
- Base::importScripts(urls, ec);
- thread()->workerObjectProxy().reportPendingActivity(hasPendingActivity());
+ auto result = Base::importScripts(urls);
+ thread().workerObjectProxy().reportPendingActivity(hasPendingActivity());
+ return result;
}
-DedicatedWorkerThread* DedicatedWorkerGlobalScope::thread()
+DedicatedWorkerThread& DedicatedWorkerGlobalScope::thread()
{
- return static_cast<DedicatedWorkerThread*>(Base::thread());
+ return static_cast<DedicatedWorkerThread&>(Base::thread());
}
} // namespace WebCore