Index: Source/modules/serviceworkers/ServiceWorker.cpp |
diff --git a/Source/modules/serviceworkers/ServiceWorker.cpp b/Source/modules/serviceworkers/ServiceWorker.cpp |
index 0bbd5048335f6378f29b09f09f09a8b053a96b5d..9e2faa78d8081892b23f4fe9a01d8f781c1474f2 100644 |
--- a/Source/modules/serviceworkers/ServiceWorker.cpp |
+++ b/Source/modules/serviceworkers/ServiceWorker.cpp |
@@ -31,6 +31,10 @@ |
#include "config.h" |
#include "ServiceWorker.h" |
+#include "bindings/v8/ExceptionState.h" |
+#include "core/dom/MessagePort.h" |
+#include "public/platform/WebMessagePortChannel.h" |
+#include "public/platform/WebString.h" |
namespace WebCore { |
@@ -39,4 +43,21 @@ ServiceWorker::ServiceWorker(PassOwnPtr<blink::WebServiceWorker> worker) |
{ |
} |
+void ServiceWorker::postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray* ports, ExceptionState& exceptionState) |
+{ |
+ // Disentangle the port in preparation for sending it to the remote context. |
+ OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(ports, exceptionState); |
+ if (exceptionState.hadException()) |
+ return; |
+ |
+ blink::WebString messageString = message->toWireString(); |
+ blink::WebMessagePortChannelArray* webChannels = 0; |
+ if (channels && channels->size()) { |
adamk
2014/03/19 17:48:58
It makes me sad to see another version of this loo
jsbell
2014/03/19 21:06:47
This factors out pretty cleanly (I didn't touch re
|
+ webChannels = new blink::WebMessagePortChannelArray(channels->size()); |
+ for (size_t i = 0; i < channels->size(); ++i) |
+ (*webChannels)[i] = (*channels)[i].leakPtr(); |
+ } |
+ m_outerWorker->postMessage(messageString, webChannels); |
+} |
+ |
} // namespace WebCore |