Chromium Code Reviews| 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( |