Index: content/renderer/webworker_proxy.cc |
diff --git a/content/renderer/webworker_proxy.cc b/content/renderer/webworker_proxy.cc |
index 1457be7f8d3a953116aa5edc5a064116cfe88f5c..5f85b1c8b77c8db2ab633988b2c01268a40bb899 100644 |
--- a/content/renderer/webworker_proxy.cc |
+++ b/content/renderer/webworker_proxy.cc |
@@ -10,12 +10,14 @@ |
#include "content/common/webmessageportchannel_impl.h" |
#include "content/common/worker_messages.h" |
#include "content/renderer/worker_devtools_agent_proxy.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebWorkerClient.h" |
using WebKit::WebCommonWorkerClient; |
using WebKit::WebMessagePortChannel; |
-using WebKit::WebMessagePortChannelArray; |
+using WebKit::WebTransferableReceiptArray; |
+using WebKit::WebSerializedScriptValue; |
using WebKit::WebString; |
using WebKit::WebURL; |
using WebKit::WebWorkerClient; |
@@ -67,18 +69,37 @@ void WebWorkerProxy::terminateWorkerContext() { |
} |
void WebWorkerProxy::postMessageToWorkerContext( |
- const WebString& message, const WebMessagePortChannelArray& channels) { |
- std::vector<int> message_port_ids(channels.size()); |
- std::vector<int> routing_ids(channels.size()); |
- for (size_t i = 0; i < channels.size(); ++i) { |
- WebMessagePortChannelImpl* webchannel = |
- static_cast<WebMessagePortChannelImpl*>(channels[i]); |
- message_port_ids[i] = webchannel->message_port_id(); |
- webchannel->QueueMessages(); |
- routing_ids[i] = MSG_ROUTING_NONE; |
- DCHECK(message_port_ids[i] != MSG_ROUTING_NONE); |
+ const WebString& raw_message, |
+ const WebTransferableReceiptArray& receipts) { |
+ size_t unflattenableCount; |
jam
2011/08/01 06:24:56
nit: chrome style is lower case variable names wit
|
+#ifndef WebTransferable_h |
+ WebString message = raw_message; |
+ unflattenableCount = receipts.size(); |
+#else |
+ WebString message = WebSerializedScriptValue::flattenReceiptList( |
+ raw_message, receipts, &unflattenableCount); |
+#endif |
+ std::vector<int> message_port_ids(unflattenableCount); |
+ std::vector<int> routing_ids(unflattenableCount); |
+ size_t nextUnflattenable = 0; |
+ for (size_t i = 0; i < receipts.size(); ++i) { |
+#ifndef WebTransferable_h |
+ { |
+#else |
+ if (!receipts[i]->isFlattenable()) { |
+ DCHECK(receipts[i]->asWebMessagePortChannel()); |
+#endif |
+ DCHECK(nextUnflattenable < unflattenableCount); |
+ WebMessagePortChannelImpl* webchannel = |
+ static_cast<WebMessagePortChannelImpl*>(receipts[i]); |
+ message_port_ids[nextUnflattenable] = webchannel->message_port_id(); |
+ webchannel->QueueMessages(); |
+ routing_ids[nextUnflattenable] = MSG_ROUTING_NONE; |
+ DCHECK(message_port_ids[nextUnflattenable] != MSG_ROUTING_NONE); |
+ ++nextUnflattenable; |
+ } |
} |
- |
+ DCHECK(nextUnflattenable == unflattenableCount); |
Send(new WorkerMsg_PostMessage( |
route_id_, message, message_port_ids, routing_ids)); |
} |
@@ -144,13 +165,13 @@ void WebWorkerProxy::OnPostMessage( |
const std::vector<int>& sent_message_port_ids, |
const std::vector<int>& new_routing_ids) { |
DCHECK(new_routing_ids.size() == sent_message_port_ids.size()); |
- WebMessagePortChannelArray channels(sent_message_port_ids.size()); |
+ WebTransferableReceiptArray receipts(sent_message_port_ids.size()); |
for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { |
- channels[i] = new WebMessagePortChannelImpl( |
+ receipts[i] = new WebMessagePortChannelImpl( |
new_routing_ids[i], sent_message_port_ids[i]); |
} |
- client_->postMessageToWorkerObject(message, channels); |
+ client_->postMessageToWorkerObject(message, receipts); |
} |
void WebWorkerProxy::OnPostConsoleMessageToWorkerObject( |